6-springboot配置多数据源

发布时间 2023-03-22 21:16:26作者: companion
1.application.properties中配置多数据源
#refund数据源
#此种标黄的没办法自己进行解析,代码读取
spring.datasource.refunddb.url=jdbc:mysql://refund地址
spring.datasource.refunddb.username=uat
spring.datasource.refunddb.password=uat
spring.datasource.refunddb.driver-class-name=com.mysql.jdbc.Driver
#user数据源
#此种标黄的没办法自己进行解析,代码读取
spring.datasource.userdb.url=jdbc:mysql://uat
spring.datasource.userdb.username=
uat
spring.datasource.userdb.password=uat
spring.datasource.userdb.driver-class-name=com.mysql.jdbc.Driver
2.增加配置类-代替xml文件的作用
RefundDBDataSource
UserDBDataSource
内容分别如下:
@Configuration //== xml文件的作用
@MapperScan(basePackages = "com.example.springboot.dao.user",sqlSessionFactoryRef = "userdbSqlSessionFactory")
public class UserDBDataSource {
//1.datasource
@Bean(name = "userdbDataSource")
@ConfigurationProperties(prefix = "spring.datasource.userdb")//application.properties文件中的配置前缀
public DataSource userdbDataSource(){
return DataSourceBuilder.create().build();
}
//2.sqlSessionFactory
@Bean(name = "userdbSqlSessionFactory")
public SqlSessionFactory userdbSqlSessionFactory(@Qualifier("userdbDataSource") DataSource userdbDataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(userdbDataSource);
return sqlSessionFactoryBean.getObject();
}
//3.sqlSessionTemplate
@Bean(name = "userdbSqlSessionTemplate")
public SqlSessionTemplate userdbSqlSessionTemplate(@Qualifier("userdbSqlSessionFactory")SqlSessionFactory userdbSqlSessionFactory){
return new SqlSessionTemplate(userdbSqlSessionFactory);
}
//事务的处理
@Bean
public DataSourceTransactionManager userdbDataSourceTransactionManager(@Qualifier("userdbDataSource") DataSource userdbDataSource){
return new DataSourceTransactionManager(userdbDataSource);
}
}
@Configuration //== xml文件的作用
@MapperScan(basePackages = "com.example.springboot.dao.refund",sqlSessionFactoryRef = "refunddbSqlSessionFactory")
public class RefundDBDataSource {
//1.datasource
@Bean(name = "refunddbDataSource")
@ConfigurationProperties(prefix = "spring.datasource.refunddb")//application.properties文件中的配置前缀
public DataSource refunddbDataSource(){
return DataSourceBuilder.create().build();
}
//2.sqlSessionFactory
@Bean(name = "refunddbSqlSessionFactory")
public SqlSessionFactory refunddbSqlSessionFactory(@Qualifier("refunddbDataSource") DataSource refunddbDataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(refunddbDataSource);
return sqlSessionFactoryBean.getObject();
}
//3.sqlSessionTemplate
@Bean(name = "refunddbSqlSessionTemplate")
public SqlSessionTemplate refunddbSqlSessionTemplate(@Qualifier("refunddbSqlSessionFactory")SqlSessionFactory refunddbSqlSessionFactory){
return new SqlSessionTemplate(refunddbSqlSessionFactory);
}
//事务的处理
@Bean
public DataSourceTransactionManager refunddbDataSourceTransactionManager(@Qualifier("refunddbDataSource") DataSource refunddbDataSource){
return new DataSourceTransactionManager(refunddbDataSource);
}
}
3.增加对应的配置目录:
com.example.springboot.dao.user
com.example.springboot.dao.refund
将dao层的xml文件生成到此目录中

4.事务涉及到多个库,没办法进行处理-分布式事务解决
@Service
public class UserServiceImpl implements UserService {
@Autowired
TblSysuserInfoMapper tblSysuserInfoMapper;
@Override
@Transactional(transactionManager = "")//事务需要使用分布式事务-此处的事务没有起作用
public String getUserNo() {
/*int i = 1/0;
return tblSysuserInfoMapper.selectByPrimaryKey("100000").getUserNo();*/
//商品库减去
//订单库增加
//以上对应两个库,
return "";
}
}