php网站开发套模板,正在建设中的网站可算违规,网络编程课程设计,买东西在什么网站最好一、背景
一个应用难免需要连接多个数据库#xff0c;像我们系统起码连接了5个以上数据库#xff0c;AWS RDS主库#xff0c;ECS自搭MySQL从库#xff0c;工厂系统三个SQLServer数据库#xff0c;在线网站MySQL数据库#xff0c;记得很早以前是用SessionFactory配置像我们系统起码连接了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 用ThreadLocalString存放当前线程的数据源标识 实现determineCurrentLookupKey方法获得当前数据源标记
3、DataSourceAspect 利用AOP进行数据源切换DataSourceAspect类会去获取Service方法上的注解如果没有注解则使用默认数据源否则得到注解上的name调用DynamicDataSource将数据源标识设置进去然后调用Service方法该线程就使用该数据源。
三、实现代码
1、application.properties 2、DynamicDataSource 自定义动态数据源类 3、DataSourceConfig 数据源配置类
将数据源配置注入到DynamicDataSource类 4、DataSourceNames 数据源注解名定义 5、DataSourceAspect 6、业务类