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       58 阅读
  2. SpringBoot实现动态数据配置

    2024-04-03 19:10:02       53 阅读
  3. springboot动态切换数据

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

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

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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 19:10:02       172 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 19:10:02       190 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 19:10:02       158 阅读
  4. Python语言-面向对象

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

热门阅读

  1. x264 arm64汇编分析 quant8x8_neon分析

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

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

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

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

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

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

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

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

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