spring-boot-mybatis-mutiple-datasource
环境
- 开发工具:IDEA
- 基础工具:Maven+JDK8
- 所用技术:SpringBoot 2.1.1.RELEASE、Mybatis
- 数据库:MySQL 5.7
说明
源码:spring-boot-mybatis-mutiple-datasource
基于mybatis的多数据源操作,首先我们来看一下目录结构
在sql目录下有两个数据源的测试SQL可以在自己的数据库中执行方便后续的测试。
然后再我们application.properties配置文件中配置我们数据的数据源
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| server.port=8081
# 配置第一个数据源 spring.datasource.hikari.db1.jdbc-url=jdbc:mysql://127.0.0.1:3306/baike?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8 spring.datasource.hikari.db1.username=root spring.datasource.hikari.db1.password= spring.datasource.hikari.db1.driver-class-name=com.mysql.cj.jdbc.Driver
# 配置第二个数据源 spring.datasource.hikari.db2.jdbc-url=jdbc:mysql://127.0.0.1:3306/script?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8 spring.datasource.hikari.db2.username=root spring.datasource.hikari.db2.password= spring.datasource.hikari.db2.driver-class-name=com.mysql.cj.jdbc.Driver
|
因为两个不同数据库数据源,所以我们不用使用默认的mybatis配置,需要自定义,我们定义两个配置类配置这两个数据源
DataSource1Config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
@Configuration @MapperScan(basePackages = "com.yi.mutiple.datasource.dao.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate") public class DataSource1Config {
@Bean(name = "db1DataSource") @ConfigurationProperties(prefix = "spring.datasource.hikari.db1") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); }
@Bean(name = "db1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); }
@Bean(name = "db1TransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("db1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
@Bean(name = "db1SqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); }
}
|
DataSource2Config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
@Configuration @MapperScan(basePackages = "com.yi.mutiple.datasource.dao.db2", sqlSessionTemplateRef = "db2SqlSessionTemplate") public class DataSource2Config {
@Bean(name = "db2DataSource") @ConfigurationProperties(prefix = "spring.datasource.hikari.db2") public DataSource testDataSource() { return DataSourceBuilder.create().build(); }
@Bean(name = "db2SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); }
@Bean(name = "db2TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("db2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
@Bean(name = "db2SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); }
}
|
从配置中我们可以看出还可以xml方式访问,不过我们这里使用注解,如果有需要的可以打开注释即可使用xml。
接下来还有一个关键的点就是我们dao中每个dao要对应操作的数据源,可以使用**@Qualifier**注解
BaiKeDao
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
@Qualifier("db1SqlSessionTemplate") public interface BaiKeDao {
@Select("SELECT * FROM baike WHERE id = #{id}") Baike findBaikeById(Integer id); }
|
ScriptDao
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
@Qualifier("db2SqlSessionTemplate") public interface ScriptDao {
@Select("SELECT * FROM script_info WHERE type = #{type}") List<ScriptInfo> findScriptByType(Byte type); }
|
我们使用接口请求看看我们的数据:
BaiKeController
ScriptController
主要的已经讲解完毕,剩下的细节请阅读代码:spring-boot-mybatis-mutiple-datasource
问题建议