1、在properties文件中配置多个数据库连接信息,不可使用springboot提供的属性名要自定义,但是后缀不可改变,加载的时候根据他的前缀进行加载。
spring.test01.jdbc-url=jdbc:mysql://localhost:3306/test
spring.test01.username=root
spring.test01.password=123456
spring.test01.driver-class-name=com.mysql.jdbc.Driver
spring.test02.jdbc-url=jdbc:mysql://localhost:3306/test01
spring.test02.username=root
spring.test02.password=123456
spring.test02.driver-class-name=com.mysql.jdbc.Driver
2、加载链接信息进行创建数据源——根据数据源创建sqlsessionfactory——通过数据源配置事务管理——通过sqlsessionfactory创建SqlSessionTemplate——通过@MapperScan注解进行扫包,指定哪个包使用哪个数据源
数据源一:
@Configuration // 注册到springboot容器中
//进行扫包,指定那个包使用该数据源
@MapperScan(basePackages = "com.hzy.mapper.mapper01", sqlSessionFactoryRef = "test1SqlSessionFactory")
public class Test01DataSource{
/*
* 加载application.properties文件中,以spring.test01开头的值
* 更具加载的值进行创建数据源
*/
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.test01")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
/*
* 根据创建好的数据源进行创建sqlsessionfactory
* 如果有映射文件可以加载映射文件
*/
@Bean(name = "test1SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setMapperLocations( new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
return bean.getObject();
}
/*
* 配置该数据源的事务管理
*/
@Bean(name = "test1TransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/*
* 配置SqlSessionTemplate
*/
@Bean(name = "test1SqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
数据源二:
@Configuration // 将标注的类注册到springboot容器中
//进行扫包,指定那个包使用该数据源
@MapperScan(basePackages = "com.hzy.mapper.mapper02", sqlSessionFactoryRef = "test2SqlSessionFactory")
public class Test02DataSource{
/*
* 加载application.properties文件中,以spring.test02开头的值
* 更具加载的值进行创建数据源
*/
@Bean(name = "test2DataSource")
@ConfigurationProperties(prefix = "spring.test02")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
/*
* 根据创建好的数据源进行创建sqlsessionfactory
* 如果有映射文件可以加载映射文件
*/
@Bean(name = "test2SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml"));
return bean.getObject();
}
/*
* 配置该数据源的事务管理
*/
@Bean(name = "test2TransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
/*
* 配置SqlSessionTemplate
*/
@Bean(name = "test2SqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(
@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
3、事务管理使用@Transactional注解的transactionManager属性进行配置事务管理器。
//指定哪个数据源的事务
@Transactional(transactionManager="test1TransactionManager")
public void insert(String name,Integer age) {
boolean flang = usermapper01.insert(name, age);
}