在实际开发中,我们会遇到一个应用需要访问多个数据源的情况。因此,我们需要配置多个数据源。这里我们来看看使用 MyBatis(XML 方式)实现多数据源配置。
添加相关依赖
1 | <dependency> |
2 | <groupId>org.mybatis.spring.boot</groupId> |
3 | <artifactId>mybatis-spring-boot-starter</artifactId> |
4 | <version>1.3.1</version> |
5 | </dependency> |
配置数据源信息
- application.properties
1 | # 数据源一 |
2 | jdbc:mysql://localhost:3306/game?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 = |
3 | root = |
4 | root = |
5 | com.mysql.jdbc.Driver = |
6 | |
7 | # 数据源二 |
8 | jdbc:mysql://localhost:3306/product?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 = |
9 | root = |
10 | root = |
11 | com.mysql.jdbc.Driver = |
配置多数据源
集成 MyBatis 配置数据源步骤如下:
- 创建数据源
Datasource
- 创建 Session 会话工厂
SqlSessionFactroy
- 创建数据库事务
DataSourceTransactionManager
- 创建
SqlSessionTemplate
最关键的地方就是数据源配置这部分,需要一层一层注入,先创建DataSource
,再创建SqlSessionFactory
,然后再创建事务管理器DataSourceTransactionManager
,最后包装到SqlSessionTemplate
中。
数据源一
1 |
|
2 | "com.example.mybatis.mapper.primary", sqlSessionTemplateRef = "PrimarySqlSessionTemplate") (basePackages = |
3 | public class DataSourcePrimaryConfig { |
4 | |
5 | "PrimaryDataSource") (name = |
6 | |
7 | "spring.datasource.primary") (prefix = |
8 | public DataSource dataSourcePrimary() { |
9 | return new DruidDataSource(); |
10 | } |
11 | |
12 | "PrimarySqlSessionFactory") (name = |
13 | |
14 | public SqlSessionFactory sqlSessionFactoryPrimary(@Qualifier("PrimaryDataSource") DataSource dataSource) throws Exception { |
15 | SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); |
16 | sqlSessionFactoryBean.setDataSource(dataSource); |
17 | sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() |
18 | .getResources("classpath:mybatis/mapper/primary/*.xml")); |
19 | |
20 | return sqlSessionFactoryBean.getObject(); |
21 | } |
22 | |
23 | "PrimaryTransactionManager") (name = |
24 | |
25 | public DataSourceTransactionManager transactionManagerPrimary(@Qualifier("PrimaryDataSource") DataSource dataSource) { |
26 | return new DataSourceTransactionManager(dataSource); |
27 | } |
28 | |
29 | "PrimarySqlSessionTemplate") (name = |
30 | |
31 | public SqlSessionTemplate sqlSessionTemplatePrimary(@Qualifier("PrimarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) { |
32 | return new SqlSessionTemplate(sqlSessionFactory); |
33 | } |
34 | |
35 | } |
数据源二
1 |
|
2 | "com.example.mybatis.mapper.secondary", sqlSessionTemplateRef = "SecondarySqlSessionTemplate") (basePackages = |
3 | public class DataSourceSecondaryConfig { |
4 | |
5 | "SecondaryDataSource") (name = |
6 | "spring.datasource.secondary") (prefix = |
7 | public DataSource dataSource() { |
8 | return new DruidDataSource(); |
9 | } |
10 | |
11 | "SecondarySqlSessionFactory") (name = |
12 | public SqlSessionFactory sqlSessionFactorySecondary(@Qualifier("SecondaryDataSource") DataSource dataSource) throws Exception { |
13 | SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); |
14 | factoryBean.setDataSource(dataSource); |
15 | factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() |
16 | .getResources("classpath:mybatis/mapper/secondary/*.xml")); |
17 | |
18 | return factoryBean.getObject(); |
19 | |
20 | } |
21 | |
22 | "SecondaryTransactionManager") (name = |
23 | public DataSourceTransactionManager transactionManagerSecondary(@Qualifier("SecondaryDataSource") DataSource dataSource) { |
24 | return new DataSourceTransactionManager(dataSource); |
25 | } |
26 | |
27 | "SecondarySqlSessionTemplate") (name = |
28 | public SqlSessionTemplate sqlSessionTemplateSecondary(@Qualifier("SecondarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) { |
29 | return new SqlSessionTemplate(sqlSessionFactory); |
30 | } |
31 | } |
以上配置完成之后,集成 MyBatis 多数据源配置就已经完成了,接下来就可以操作数据啦!
最后,详细代码可以查看本示例的 Demo。