目录
9.切换数据源的注解加载实现类的方法上,如果是用主库就不用了加了
1.自定义数据源选择注解
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DataSource {
String name() default DataSources.MASTER_DB;
}
2.DataSources 数据源名称
public interface DataSources {
String MASTER_DB = "master";
String SLAVE_DB = "slave";
}
3.Mybatis配置
@Configuration
public class MybatisConfig {
@Resource
@Qualifier(DataSources.MASTER_DB)
private DataSource masterDB;
@Resource
@Qualifier(DataSources.SLAVE_DB)
private DataSource slaveDB;
/**
* 动态数据源
*/
@Bean(name = "dynamicDataSource")
public DataSource dynamicDataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
// 默认数据源
dynamicDataSource.setDefaultTargetDataSource(masterDB);
// 配置多数据源
Map<Object, Object> dsMap = new HashMap<>(4);
dsMap.put(DataSources.MASTER_DB, masterDB);
dsMap.put(DataSources.SLAVE_DB, slaveDB);
dynamicDataSource.setTargetDataSources(dsMap);
return dynamicDataSource;
}
@Bean
@ConfigurationProperties(prefix = "mybatis")
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
// 配置数据源,此处配置为关键配置,如果没有将 dynamicDataSource 作为数据源则不能实现切换
sqlSessionFactoryBean.setDataSource(dynamicDataSource());
return sqlSessionFactoryBean;
}
}
4.加载配置文件数据源
@Configuration
public class DatasourceConfig {
@Bean(name = DataSources.MASTER_DB)
@ConfigurationProperties(prefix = "spring.datasource.druid.master")
@Primary
public DataSource