SpringBoot动态数据源实现

一、背

一个应用难免需要连接多个数据库,像我们系统起码连接了5个以上数据库,AWS RDS主库,ECS自搭MySQL从库,工厂系统三个SQLServer数据库,在线网站MySQL数据库,记得很早以前是用SessionFactory配置(只有模糊的印象了),  下面介绍一下在Spring boot通过AOP的方式实现动态数据源切换。

二、基础知识点

1、AbstractRoutingDataSource

AbstractRoutingDataSource是Spring-jdbc提供一个继承自AbstractDataSource的抽象类。

AbstractRoutingDataSource 关键属性

  • targetDataSources:存放Key和数据库连接映射关系

  • defaultTargetDataSource:  默认连接

  • resolvedDataSources:这个数据是通过targetDataSources构建而成,也是存放Key和数据库连接映射关系。

AbstractRoutingDataSource 关键方法

  • afterPropertiesSet:在初始化Bean时就会执行,将外部传入的targetDataSources构建为内部的resolvedDataSources。

  • determineTargetDataSource:获取数据库连接getConnection方法会调用determineTargetDataSource来创建连接,它决定Spring容器使用的是哪一个连接。

  • determineCurrentLookupKey:抽像方法,一个扩展点,由子类实现,获取连接标识。

2、DynamicDataSource

          自定义动态数据源类

  • 继承AbstractRoutingDataSource

  • 用ThreadLocal<String>存放当前线程的数据源标识

  •  实现determineCurrentLookupKey方法获得当前数据源标记

3、DataSourceAspect

利用AOP进行数据源切换,DataSourceAspect类会去获取Service方法上的注解,如果没有注解则使用默认数据源,否则得到注解上的name,调用DynamicDataSource将数据源标识设置进去,然后调用Service方法该线程就使用该数据源。

三、实现代码

1、application.properties

2、DynamicDataSource 自定义动态数据源类

图片

3、DataSourceConfig 数据源配置类

将数据源配置注入到DynamicDataSource类

4、DataSourceNames 数据源注解名定义

5、DataSourceAspect 

6、业务类

相关推荐

  1. SpringBoot实现动态数据配置

    2024-04-03 19:10:02       24 阅读
  2. SpringBoot实现动态数据配置

    2024-04-03 19:10:02       20 阅读
  3. Spring: SpringBoot MybatisPlus框架动态数据

    2024-04-03 19:10:02       9 阅读
  4. springboot数据&动态数据(主从)

    2024-04-03 19:10:02       8 阅读
  5. springboot实现数据

    2024-04-03 19:10:02       23 阅读

最近更新

  1. 【JVM】JVM的垃圾回收机制与垃圾回收器的选择

    2024-04-03 19:10:02       0 阅读
  2. 从安装系统到部署datax

    2024-04-03 19:10:02       0 阅读
  3. CS32 C++ programming

    2024-04-03 19:10:02       0 阅读
  4. LeetCode-94-二叉树的中序遍历

    2024-04-03 19:10:02       0 阅读
  5. springboot接口提高查询速度方法

    2024-04-03 19:10:02       0 阅读
  6. 分治法构建Gray码问题

    2024-04-03 19:10:02       0 阅读
  7. 深入理解与运用Vue 2中的插槽(Slots)

    2024-04-03 19:10:02       0 阅读
  8. 测试testing1

    2024-04-03 19:10:02       0 阅读
  9. Mysql多表联查使用聚合函数常见问题

    2024-04-03 19:10:02       0 阅读

热门阅读

  1. x264 arm64汇编分析 quant8x8_neon分析

    2024-04-03 19:10:02       7 阅读
  2. [Python学习篇] Python格式化输出

    2024-04-03 19:10:02       9 阅读
  3. 亚远景科技-浅谈ASPICE标准和ASPICE认证/评估

    2024-04-03 19:10:02       6 阅读
  4. 容器网络测试关键问题

    2024-04-03 19:10:02       6 阅读
  5. Hive安装配置

    2024-04-03 19:10:02       4 阅读
  6. spark 编程案例

    2024-04-03 19:10:02       6 阅读
  7. Springboot3 集成knife4j(swagger)

    2024-04-03 19:10:02       7 阅读
  8. Chrome安装Vue插件vue-devtools的步骤

    2024-04-03 19:10:02       5 阅读
  9. 建立mysql测试数据

    2024-04-03 19:10:02       6 阅读