在一个项目中,有可能会遇到连接两个或者两个以上数据源的情况,目前我们就是这样
我们用的框架是SpringBoot,切换数据库采用注解搭配spring AOP的方式来实现.
1.在springBoot的 application.properties文件中添加数据源
# 数据库连接参数配置(主数据源)
spring.datasource.url=jdbc:oracle:thin:@192.168.1.60:1521:orcl
spring.datasource.username=admin
spring.datasource.password=pass1
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
#数据库连接参数配置(副数据源1)
slave.datasource.one.url=jdbc:oracle:thin:@192.168.1.66:1521:orcl
slave.datasource.one.username=admin
slave.datasource.one.password=pass2
slave.datasource.one.driver-class-name=oracle.jdbc.OracleDriver
#数据库连接参数配置(副数据源2)
slave.datasource.two.url=jdbc:oracle:thin:@192.168.1.62:1521:orcl
slave.datasource.two.username=admin
slave.datasource.two.password=pass3
slave.datasource.two.driver-class-name=oracle.jdbc.OracleDriver
slave.datasource.names =one,two
2.创建数据源注解TargetDataSource
@Target({ElementType.TYPE, ElementType.METHOD})// TYPE用于类,接口上,METHOD可以用于方法
@Retention(RetentionPolicy.RUNTIME)//一般都是用RUNTIME,因为这是在程序运行时可以对注解进行读取
@Documented//被 javadoc工具记录. 默认情况下,javadoc是不包括注解的
public @interface TargetDataSource {
//数据源名称(用于根据名称切换数据源)
String name();
}
3.创建动态数据源上下文管理
/*
* 动态数据源上下文管理
*/
public class DynamicDataSourceContextHolder {
//存放当前线程使用的数据源类型信息
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
//存放数据源id
public static List<String> dataSourceIds = new ArrayList<String>();
//设置数据源ID
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
//获取数据源
public static String getDataSourceType() {
return contextHolder.get();
}
//清除数据源
public static void clearDataSourceType() {
con