使用Spring Boot和MyBatis配置多数据源
引言
在实际开发中,有时候我们需要连接多个数据库,可能是因为业务需求需要访问不同的数据库,或者为了提高性能、分离读写操作。Spring Boot和MyBatis提供了便捷的方式来配置和管理多个数据源。本文将详细介绍如何在Spring Boot项目中使用MyBatis配置多数据源。
1. 添加依赖
首先,在你的Spring Boot项目中,需要添加MyBatis和相关的依赖。在pom.xml
文件中添加以下依赖:
<dependencies>
<!-- 其他依赖... -->
<!-- MyBatis 和 Spring Boot 集成依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version> <!-- 查看最新版本 -->
</dependency>
<!-- 数据源依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2. 配置数据源
在application.properties
(或application.yml
)文件中配置多个数据源的连接信息。例如:
# 数据源1
spring.datasource.datasource1.url=jdbc:mysql://localhost:3306/db1
spring.datasource.datasource1.username=user1
spring.datasource.datasource1.password=password1
spring.datasource.datasource1.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源2
spring.datasource.datasource2.url=jdbc:mysql://localhost:3306/db2
spring.datasource.datasource2.username=user2
spring.datasource.datasource2.password=password2
spring.datasource.datasource2.driver-class-name=com.mysql.cj.jdbc.Driver
3. 创建数据源配置类
在config
包下创建一个名为DataSourceConfig
的类,配置多个数据源:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "spring.datasource.datasource1")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
@Bean(name = "dataSource2")
@ConfigurationProperties(prefix = "spring.datasource.datasource2")
public DataSource dataSource2() {
return DataSourceBuilder.create().build();
}
}
4. 配置MyBatis
创建MyBatis的配置类,用于配置SqlSessionFactory
和SqlSessionTemplate
:
@Configuration
@MapperScan(basePackages = "com.example.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1")
public class MyBatisConfig1 {
@Bean(name = "sqlSessionFactory1")
public SqlSessionFactory sqlSessionFactory1(@Qualifier("dataSource1") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
// 其他配置...
return bean.getObject();
}
@Bean(name = "sqlSessionTemplate1")
public SqlSessionTemplate sqlSessionTemplate1(
@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
同样,如果有第二个数据源,创建一个类似的配置类。
5. 创建Mapper接口和XML文件
在com.example.mapper1
和com.example.mapper2
包下分别创建第一个和第二个数据源的Mapper接口,以及对应的XML文件。
6. 使用多数据源
在服务类中使用@Qualifier
注解注入不同数据源的SqlSessionTemplate
,然后使用对应的Mapper进行操作。例如:
@Service
public class MyService {
@Autowired
@Qualifier("sqlSessionTemplate1")
private SqlSessionTemplate sqlSessionTemplate1;
@Autowired
@Qualifier("sqlSessionTemplate2")
private SqlSessionTemplate sqlSessionTemplate2;
// 使用 sqlSessionTemplate1 操作数据源1
public void methodUsingDataSource1() {
MyMapper1 mapper1 = sqlSessionTemplate1.getMapper(MyMapper1.class);
// 执行数据库操作...
}
// 使用 sqlSessionTemplate2 操作数据源2
public void methodUsingDataSource2() {
MyMapper2 mapper2 = sqlSessionTemplate2.getMapper(MyMapper2.class);
// 执行数据库操作...
}
}
7. 测试
编写单元测试确保多数据源配置正常工作,可以使用Spring Boot提供的@SpringBootTest
注解。
@SpringBootTest
class MultipleDataSourceTest {
@Autowired
private MyService myService;
// 测试代码...
}
结论
通过以上步骤,你已经成功配置了Spring Boot项目中的多数据源,并使用MyBatis进行数据库操作。这样,你可以在应用中方便地访问不同的数据库,满足不同业务需求。
希望这篇文章对你理解和配置Spring Boot和MyBatis多数据源有所帮助。如有任何问题或建议,请随时提出。感谢阅读!
评论区