SpringBoot多数据源连接和切换

在一个项目中,有可能会遇到连接两个或者两个以上数据源的情况,目前我们就是这样

我们用的框架是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 contextHolder = new ThreadLocal();
    //存放数据源id
    public static List dataSourceIds = new ArrayList();

    //设置数据源ID
    public static void setDataSourceType(String dataSourceType) {
        contextHolder.set(dataSourceType);
    }

    //获取数据源
    public static String getDataSourceType() {
        return contextHolder.get();
    }

    //清除数据源
    public static void clearDataSourceType() {
        con

你可能感兴趣的:(springBoot,java,springboot,数据源,多个,切换)