SpringBoot配置多个数据源
-
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: ****
-
启动类配置排除数据源自动配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
-
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; } }
-
-
数据库标识
@Getter public enum DataSourceType { DATA1, DATA2, }
-
数据库管理
@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(); } }
-
在需要切换数据源的环节使用
DataSourceManagement.name.set(DataSourceType.DATA1.name()); DataSourceManagement.name.set(DataSourceType.DATA2.name());