Spring Boot 是一个用于简化 Spring 应用程序初始搭建以及开发过程的框架。MyBatis 是一个优秀的持久层框架,支持定制化 SQL、存储过程以及高级映射。多数据源指的是在一个应用中连接并操作多个不同的数据库。
原因:可能是数据源配置不正确,或者数据库连接信息有误。
解决方法:
application.yml
或 application.properties
中的数据源配置是否正确。spring:
datasource:
primary:
url: jdbc:mysql://localhost:3306/db1
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
secondary:
url: jdbc:mysql://localhost:3306/db2
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
原因:可能是数据源切换逻辑不正确,或者没有正确配置 MyBatis。
解决方法:
@DS
注解或手动切换数据源。SqlSessionFactory
和 DataSourceProxy
的配置。@Configuration
public class DataSourceConfig {
@Bean
@Primary
@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 primarySqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean
public SqlSessionFactory secondarySqlSessionFactory(@Qualifier("secondaryDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
}
原因:可能是事务管理器配置不正确,或者事务传播行为设置不当。
解决方法:
@Transactional
注解时,指定正确的数据源。@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Bean
public PlatformTransactionManager primaryTransactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public PlatformTransactionManager secondaryTransactionManager(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
通过以上配置和解决方法,可以有效解决 Spring Boot 和 MyBatis 多数据源配置和使用过程中遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云