在 Spring Boot 中配置多个数据源并使用 MyBatis-Plus 进行数据源切换
目录
在 Spring Boot 中配置多个数据源并使用 MyBatis-Plus 进行数据源切换
1. 问题描述
2. 解决方案
2.1 使用 @Primary 注解指定主数据源
示例:
2.2 使用 @Qualifier 注解指定其他数据源
示例:
2.3 使用 @MapperScan 配置扫描路径
示例:
2.4 配置动态数据源切换
示例:
2.5 使用 @DS 注解进行数据源切换
3. 表格对比:不同配置方式的区别
4. 总结
在企业级应用开发中,经常会遇到需要配置多个数据源的情况。Spring Boot 本身并不直接提供多数据源的支持,但通过合理的配置和一些第三方库的帮助,可以轻松实现多个数据源的切换。MyBatis-Plus 是我们在 MyBatis 基础上常用的增强工具,但它默认只支持单一数据源的配置。如果你在使用 MyBatis-Plus 时,发现无法正确切换多个数据源,这篇文章将从技术深度展开,探讨如何正确配置多个数据源并实现数据源的切换。
1. 问题描述
当你在 Spring Boot 项目中配置了多个数据源时,MyBatis-Plus 无法正确识别和切换数据源。通常的表现是,虽然配置了多个数据源和动态数据源切换逻辑,但 MyBatis-Plus 只会访问第一个数据源,而忽略了其他数据源。这时,我们就需要通过一些特殊的配置和第三方库来解决数据源切换的问题。
2. 解决方案
2.1 使用 @Primary 注解指定主数据源
Spring Boot 默认会选择第一个配置的数据源作为主数据源,并且注入时会默认选择该数据源。为了避免冲突,我们可以通过 @Primary 注解来明确标识哪个是主数据源。
示例:
@Configuration @EnableTransactionManagement @MapperScan(basePackages = "com.example.mapper", sqlSessionFactoryRef = "sqlSessionFactory") public class DataSourceConfig { @Primary @Bean(name = "dataSource1") @ConfigurationProperties(prefix = "spring.datasource.primary") public DataSource dataSource1() { return DataSourceBuilder.create().build(); } @Bean(name = "dataSource2") @ConfigurationProperties(prefix = "spring.datasource.secondary") public DataSource dataSource2() { return DataSourceBuilder.create().build(); } }
在上述代码中,我们配置了两个数据源,其中 @Primary 注解标注了 dataSource1 作为主数据源。Spring Boot 会默认使用标注为 @Primary 的数据源。
2.2 使用 @Qualifier 注解指定其他数据源
当配置多个数据源时,除了 @Primary 作为主数据源外,还可以使用 @Qualifier 注解来明确指定其他数据源。这样,我们可以确保每个数据源在需要时被正确引用。
示例:
@Configuration @EnableTransactionManagement public class DataSourceConfig { @Primary @Bean(name = "dataSource1") @ConfigurationProperties(prefix =