SpringBoot多数据源切换(二)(依旧超级简单)
背景:主从架构下,数据库的读写分离1. 依赖 org.springframework.boot spring-boot-starter-web org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-boot-starter 3.5.3 org.springframework.boot spring-boot-starter-aop com.alibaba druid-spring-boot-starter 1.2.16 mysql mysql-connector-java 8.0.29 2.配置数据源spring: datasource: druid: type: com.alibaba.druid.pool.DruidDataSource master: url: jdbc:mysql://127.0.0.1:3307/user1?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver slave1: enabled: true url: jdbc:mysql://127.0.0.1:3308/user1?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver otmstariff: enabled: false url: jdbc:mysql://127.0.0.1:3306/user1?useUnicode=true&characterEncoding=utf8&useSSL=false username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver 3. 注册数据源
1)创建一个数据源枚举类 public enum DataSourceType { /** * 主库 */ MASTER, /** * 从库 */ SLAVE1, SLAVE2 }
2)我们切换数据库所需要的bean全部交给spring容器中 @Configuration public class DynamicDataSourceConfig { @Bean @Qualifier("masterDataSource") @ConfigurationProperties("spring.datasource.druid.master") public DataSource masterDataSource() { return DruidDataSourceBuilder.create().build(); } @Qualifier("slave1DataSource") @Bean @ConfigurationProperties("spring.datasource.druid.slave1") // 根据配置文件enabled属性,判断该配置是否生效 @ConditionalOnProperty(prefix = "spring.datasource.druid.slave1", name = "enabled", havingValue = "true") public DataSource slave1DataSource() { return DruidDataSourceBuilder.create().build(); } @Qualifier("slave2DataSource") @Bean @ConfigurationProperties("spring.datasource.druid.slave2") @ConditionalOnProperty(prefix = "spring.datasource.druid.slave2", name = "enabled", havingValue = "true") public DataSource slave2DataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "dynamicDataSource") @Primary public DynamicDataSource dataSource(DataSource masterDataSource) { Map