SpringBoot配置多个数据源

SpringBoot配置多个数据源

  1. Druid相关配置

        data1:
          driver-class-name: com.ibm.db2.jcc.DB2Driver
          url: jdbc:db2://ip:50000/DATA1
          username: ****
          password: ****
        data2:
          driver-class-name: com.ibm.db2.jcc.DB2Driver
          url: jdbc:db2://ip:50000/DATA2
          username: ****
          password: ****
    
  2. 启动类配置排除数据源自动配置

    @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
    
    1. spring容器中以@bean的方式添加数据库资源

      @Configuration
      public class DataSourceConfig {
          @Bean(name = "data1")
          @ConfigurationProperties(prefix = "spring.datasource.data1")
          public DataSource data1(){
              DruidDataSource data1 = DruidDataSourceBuilder.create().build();
              return data1;
          }
      
      
          @Bean(name = "data2")
          @ConfigurationProperties(prefix = "spring.datasource.data2")
          public DataSource data2(){
              DruidDataSource data2 = DruidDataSourceBuilder.create().build();
              return data1;
          }
      }
      
  3. 数据库标识

    @Getter
    public enum DataSourceType {
        DATA1,
        DATA2,
    }
    
    
  4. 数据库管理

    @Component
    @Primary //将该bean作为主要的主要注入的bean
    public class DataSourceManagement extends AbstractRoutingDataSource {
    
        //当前使用数据源的标识
        public static ThreadLocal<String> name = new ThreadLocal<>();
        @Autowired
        private DataSource data1;
        @Autowired
        private DataSource data2;
    
    
        public  DataSourceManagement(){
            name.set(DataSourceType.DATA1.name());
        }
    
        @Override
        protected Object determineCurrentLookupKey() {
            return name.get();
        }
    
        @Override
        public void afterPropertiesSet(){
            Map<Object,Object> targetDataSource = new ConcurrentHashMap<>();
            targetDataSource.put(DataSourceType.DATA1.name(),data1);
            targetDataSource.put(DataSourceType.DATA2.name(),data2);
            super.setTargetDataSources(targetDataSource);
            super.setDefaultTargetDataSource(data1);
            super.afterPropertiesSet();
        }
    }
    
    
  5. 在需要切换数据源的环节使用

    DataSourceManagement.name.set(DataSourceType.DATA1.name());
    DataSourceManagement.name.set(DataSourceType.DATA2.name());
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值