1. 修改启动类
首先要将spring boot自带的DataSourceAutoConfiguration禁掉,因为它会读取application.properties文件的spring.datasource.*属性并自动配置单数据源。在@SpringBootApplication注解中添加exclude属性即可:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
2. 然后在application.properties或者.yml中配置多数据源连接信息:
# titan库
spring.datasource.titan-master.url=jdbc:mysql://X.X.X.X:port/titan?characterEncoding=UTF-8
spring.datasource.titan-master.username=
spring.datasource.titan-master.password=
spring.datasource.titan-master.driver-class-name=com.mysql.jdbc.Driver
# 连接池配置
# 省略
# 其它库
spring.datasource.db2.url=jdbc:mysql://X.X.X.X:port/titan2?characterEncoding=UTF-8
spring.datasource.db2.username=
spring.datasource.db2.password=
spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
3. 由于我们禁掉了自动数据源配置,因些下一步就需要手动将这些数据源创建出来
@Configuration
public class DataSourceConfig {
@Primary //当前注解跟随主库
@Bean(name="ds1")
@Qualifier("ds1")
@ConfigurationProperties(prefix = "spring.datasource.jzys") // application.properteis中对应属性的前缀
public DataSource dataSource1() {
return DataSourceBuilder.*create*().build();
}
@Bean(name = "ds2")
@Qualifier("ds2")
@ConfigurationProperties(prefix = "spring.datasource.sxxatest") // application.properteis中对应属性的前缀
public DataSource dataSource2() {
return DataSourceBuilder.*create*().build();
}
}
4. 配置两个mybatis的SqlSessionFactory分别使用不同的数据源
主数据库配置
@Configuration
@MapperScan(basePackages = {"com.xin.tianye.device.mapper"}, sqlSessionTemplateRef = "sqlSessionTemplatePrimary")
public class MybatisDbAConfig {
*/****
** * **为了生效在**application.properties**中**mybatis**的配置**
** *** **参考: **http://www.yayihouse.com/yayishuwu/chapter/2338**
** */**
** *@Bean
@ConfigurationProperties(prefix="mybatis.configuration")
public org.apache.ibatis.session.Configuration globalConfiguration() {
return new org.apache.ibatis.session.Configuration();
}
//
@Bean(name="sqlSessionFactoryPrimary")
@Primary
public SqlSessionFactory masterSqlSessionFactory(
@Qualifier("ds1")DataSource dataSource,org.apache.ibatis.session.Configuration config) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setConfiguration(config);
//如果使用xml 的话这里配置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/**/*Mapper.xml"));
return bean.getObject();
}
//事务
@Bean(name = "transactionManagerPrimary")
@Primary
public DataSourceTransactionManager masterDataSourceTransactionManager(
@Qualifier("ds1")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean("sqlSessionTemplatePrimary")
@Primary
public SqlSessionTemplate masterSqlSessionTemplate(
@Qualifier("sqlSessionFactoryPrimary") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
第二数据源配置
@Configuration
@MapperScan(basePackages = {"com.xin.tianye.other.mapper"}, sqlSessionTemplateRef = "sqlSessionTemplateSecond")
public class MybatisDbBConfig {
@Bean("sqlSessionFactorySecond")
public SqlSessionFactory masterSqlSessionFactory(
@Qualifier("ds2") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//如果使用xml 的话这里配置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:secondmapper/*Mapper.xml"));
return bean.getObject();
}
//事务
@Bean(name = "transactionManagerSecond")
public DataSourceTransactionManager masterDataSourceTransactionManager(
@Qualifier("ds2")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean("sqlSessionTemplateSecond")
public SqlSessionTemplate masterSqlSessionTemplate(
@Qualifier("sqlSessionFactorySecond") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}