1.定义多个数据源的mybatis配置
application.properties mybatis.mapper-locations=mappers/*.xml mybatisLog.mapper-locations=mappersLog/*.xml ## datasource master # spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url= jdbc:mysql://localhost:3306/test1?characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=466 ## datasource log # spring.datasourceLog.type=com.alibaba.druid.pool.DruidDataSource spring.datasourceLog.driver-class-name=com.mysql.jdbc.Driver spring.datasourceLog.url= jdbc:mysql://localhost:3306/log?characterEncoding=UTF-8 spring.datasourceLog.username=root spring.datasourceLog.password=466
2.定义多个数据源
@Configuration
public class DatasourceConfig {
@Bean(destroyMethod = "close", name = DataSources.MASTER_DB)
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create()
.type(DruidDataSource.class)
.build();
}
@Bean(destroyMethod = "close", name = DataSources.LOG_DB)
@ConfigurationProperties(prefix = "spring.datasourceLog")
public DataSource dataSourceLog() {
return DataSourceBuilder.create()
.type(DruidDataSource.class)
.build();
}
}
3.分别配置多个数据源
@Configuration
@MapperScan(basePackages = {"com.example.mapper.orders"})
public class MybatisConfig {
@Autowired
@Qualifier(DataSources.MASTER_DB)
private DataSource masterDB;
@Bean
@Primary
@ConfigurationProperties(prefix = "db.order")
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean;
sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(masterDB);
return sqlSessionFactoryBean;
}
}
.
@Configuration
@MapperScan(basePackages = {"com.example.mapper.users"}
, sqlSessionFactoryRef = "logSqlSessionFactory")
public class MybatisLogConfig {
@Autowired
@Qualifier("user")
private DataSource userSource;
@Bean(name = "logSqlSessionFactory")
@ConfigurationProperties(prefix = "db.user")
public SqlSessionFactoryBean sqlSessionFactoryBean() {
SqlSessionFactoryBean sqlSessionFactoryBean;
sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(userSource);
return sqlSessionFactoryBean;
}
}
关键
- 1)Configuration 扫描不同的前缀,取不同包下的sql对应的xml文件
- 2)SqlSessionFactoryBean 实例化时,默认的额外添加了 @Primary注解
- 3)MapperScan 扫描的不同的包,如果扫描相同的包也能做,但是还需要做额外的配置,可以自己尝试
- 4)不同的数据源使用不同的SqlSessionFactoryBean实例
.