SpringBoot配置多数据源
配置文件信息中配置两个数据源,分别用masterdb和devdb标记
spring:
datasource:
masterdb:
username: username
password: 123456
jdbc-url: jdbc:mysql://localhost:3306/dbA?useUnicode=true&characterEncoding=utf-8&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
devdb:
username: username
password: 123456
jdbc-url: jdbc:mysql://localhost:3306/dbB?useUnicode=true&characterEncoding=utf-8&relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
数据源的config类
@Configuration
@MapperScan(basePackages = "com.xzh.quartz.masterMaper", sqlSessionTemplateRef = "MasterSqlSessionTemplate")
public class DBMasterConfig {
@Bean(name = "MasterDataSource")
@ConfigurationProperties(prefix = "spring.datasource.masterdb")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "MasterSqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("MasterDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "MasterTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("MasterDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "MasterSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("MasterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@Configuration
@MapperScan(basePackages = "com.xzh.quartz.slaverMapper", sqlSessionTemplateRef = "SalverSqlSessionTemplate")
public class DBSlaverConfig {
@Bean(name = "SalverDataSource")
@ConfigurationProperties(prefix = "spring.datasource.devdb")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "SalverSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("SalverDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "SalverTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("SalverDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "SalverSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("SalverSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
Mapper.java文件放进对应的包路径内,缺保能被@MapperScan注解扫描到
测试类
@SpringBootTest
public class DataSourceTest {
@Autowired
StudentMapper studentMapper;
@Autowired
TeacherMapper teacherMapper;
@Autowired
MovieMapper movieMapper;
@Test
public void test(){
List list = studentMapper.queryAll();
System.out.println(list);
List<Map> movieList = movieMapper.queryAll();
System.out.println(movieList);
}
}