记录 springboot + mybatis 项目如何配置双数据源
在Spring Boot项目中配置双数据源通常涉及以下步骤:
- 配置数据源属性。
- 创建数据源实例。
- 配置SqlSessionFactory和事务管理器。
- 指定Mapper接口所使用的数据源。
以下是一个配置双数据源的示例代码:
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory sqlSessionFactoryPrimary(DataSource primaryDataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(primaryDataSource);
return sessionFactory.getObject();
}
@Bean
public SqlSessionFactory sqlSessionFactorySecondary(DataSource secondaryDataSource) throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(secondaryDataSource);
return sessionFactory.getObject();
}
@Bean
public PlatformTransactionManager transactionManagerPrimary(DataSource primaryDataSource) {
return new DataSourceTransactionManager(primaryDataSource);
}
@Bean
public PlatformTransactionManager transactionManagerSecondary(DataSource secondaryDataSource) {
return new DataSourceTransactionManager(secondaryDataSource);
}
}
在application.properties
或application.yml
中配置数据源属性:
spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/db1
username: user1
password: pass1
secondary:
url: jdbc:mysql://localhost:3306/db2
username: user2
password: pass2
在Mapper接口上使用@Mapper
注解,并使用@Primary
注解指定主数据源,例如:
@Mapper
public interface PrimaryMapper {
// 定义操作主数据源的方法
}
@Mapper
public interface SecondaryMapper {
// 定义操作次数据源的方法
}
在Service层,使用@Transactional
注解指定事务管理器,例如:
@Service
public class SomeService {
@Autowired
@Qualifier("primaryMapper")
private PrimaryMapper primaryMapper;
@Autowired
@Qualifier("secondaryMapper")
private SecondaryMapper secondaryMapper;
@Transactional(transactionManager = "transactionMa
评论已关闭