【spring boot】 mybatis配置双数据源/多数据源
前言
- spring boot 2.0.0.RELEASE
- maven 3.5
- eclipse 4.9.0
- mybatis 1.3.2
- mybatis generator 1.3.2
- pagehelper(mybatis 分頁(yè)插件) 1.2.5
- oracle 12c
在spring boot項(xiàng)目中,使用mybatis操作數(shù)據(jù)庫(kù),很方便。經(jīng)過親測(cè),比jpa好用。
mybatis提供了代碼生成器mybatis generator。使用mybatis generator可以很方便的生成mybatis代碼。
mybatis分頁(yè)插件Mybatis-PageHelper,很好的解決了分頁(yè)問題。
spring boot項(xiàng)目默認(rèn)提供1個(gè)數(shù)據(jù)源,多個(gè)數(shù)據(jù)源時(shí),需要手動(dòng)進(jìn)行一些處理,如下。
概念
- 數(shù)據(jù)源:javax.sql.DataSource類型。起到作為連接數(shù)據(jù)庫(kù)的橋梁的作用。
- mybatis SessionFactory:org.apache.ibatis.session.SqlSessionFactory類型。mybatis通過該類獲取數(shù)據(jù)源。
- Mybatis PageHelper:mybatis分頁(yè)插件,通過該插件可以很方便的實(shí)現(xiàn)分頁(yè)。
- mybatis generator:mybatis代碼生成工具,通過該工具可以很方便的生成mybatis代碼。
步驟簡(jiǎn)述
- 先配置2個(gè)數(shù)據(jù)源,分別連2個(gè)數(shù)據(jù)庫(kù)。
- 再配置2個(gè)mybatis,使mybatis能夠工作。
- 然后配置2個(gè)mybatis的分頁(yè)插件,可以使用pagehelper處理分頁(yè)。
- 最后,配置2個(gè)mybatis generator,能夠生成2個(gè)mybatis的代碼。
配置2個(gè)數(shù)據(jù)源
spring boot AutoConfigure提供的DataSourceAutoConfiguration類,自動(dòng)配置數(shù)據(jù)源。因此,先禁用DataSourceAutoConfiguration類。
... @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class}) ... public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }假設(shè),要配置兩個(gè)數(shù)據(jù)源,連接兩個(gè)數(shù)據(jù)庫(kù),分別為db1、db2,需要做如下操作:
1,在application.properties配置文件中添加如下db1和db2的jdbc配置。
2,添加db1數(shù)據(jù)源配置類PrimaryMybatisConfiguration,db2數(shù)據(jù)源配置類Db2MybatisConfiguration。
3,類PrimaryMybatisConfiguration中,添加db1 DataSourcebean。類Db2MybatisConfiguration中,添加db2 DataSourcebean。
PrimaryMybatisConfiguration
Db2MybatisConfiguration
@Bean(name = "db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.db2")public DataSource dataSource() {log.info("config db2DataSource success.");return DataSourceBuilder.create().build();}至此,兩個(gè)數(shù)據(jù)源(db1、db2),添加完成。
注:上面代碼中,默認(rèn)的數(shù)據(jù)源實(shí)現(xiàn)類:com.zaxxer.hikari.HikariDataSource。
配置2個(gè)mybatis
mybatis spring boot AutoConfigure提供的MybatisAutoConfiguration類,自動(dòng)配置Mybatis。因此,先禁用MybatisAutoConfiguration類。
... @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class}) ... public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }假設(shè),要配置兩個(gè)mybatis,分別使用db1數(shù)據(jù)源、db2數(shù)據(jù)源,需要做如下操作:
1,在application.properties配置文件中添加如下2個(gè)mybatis配置和對(duì)應(yīng)的@Configuration類。
使用db1數(shù)據(jù)源的mybatis的配置文件
使用db1數(shù)據(jù)源的mybatis的@Configuration類
... @Configuration @ConfigurationProperties(prefix = "spring.datasource.db1.extend") public class PrimaryMybatisProperties {private String mybatisMapperLocations;... }使用db2數(shù)據(jù)源的mybatis的配置文件
spring.datasource.db2.extend.mybatisMapperLocations=classpath:config/mybatis/mapper2/*.xml使用db2數(shù)據(jù)源的mybatis的@Configuration類
... @Configuration @ConfigurationProperties(prefix = "spring.datasource.db2.extend") public class Db2MybatisProperties {private String mybatisMapperLocations;... }2,配置2個(gè)mybatis的SqlSessionFactory
PrimaryMybatisConfiguration
Db2MybatisConfiguration
@Configuration @MapperScan(basePackages = { "xxx.db2.mapper" },sqlSessionFactoryRef="db2SqlSessionFactory") public class Db2MybatisConfiguration {private Logger log = LoggerFactory.getLogger(this.getClass());@Autowiredprivate Db2MybatisProperties property;@Bean(name = "db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.db2")public DataSource dataSource() {log.info("config db2DataSource success.");return DataSourceBuilder.create().build();}@Bean(name = "db2SqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) {try {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(this.property.getMybatisMapperLocations()));log.info("config db2SqlSessionFactory success.");return sessionFactory.getObject();} catch (Exception e) {log.error("config db2SqlSessionFactory failure.", e);return null;}}@Bean(name = "db2SqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "db2TransactionManager")public DataSourceTransactionManager transactionManager(@Qualifier("db2DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);} }至此,2個(gè)mybatis的SqlSessionFactory已配置完成。此時(shí),2個(gè)mybatis已經(jīng)可以工作。接下來需要配置分頁(yè)插件。
配置2個(gè)mybatis的分頁(yè)插件
pagehelper spring boot AutoConfigure提供的PageHelperAutoConfiguration類,自動(dòng)配置Mybatis的分頁(yè)插件。因此,先禁用PageHelperAutoConfiguration類。
... @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class, PageHelperAutoConfiguration.class }) ... public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }假設(shè),要配置兩個(gè)mybatis的分頁(yè)插件,需要做如下操作:
1,在application.properties配置文件中添加如下2個(gè)mybatis分頁(yè)插件的配置和對(duì)應(yīng)的@Configuration類。
使用db1數(shù)據(jù)源的mybatis分頁(yè)插件的配置文件
使用db1數(shù)據(jù)源的mybatis分頁(yè)插件的@Configuration類
... @Configuration @ConfigurationProperties(prefix = "spring.datasource.db1.extend") public class PrimaryMybatisProperties {private String mybatisMapperLocations;private String pagehelperDialect;private String pagehelperReasonable;private String pagehelperSupportMethodsArguments;private String pagehelperParams;private String pagehelperOffsetAsPageNum;private String pagehelperRowBoundsWithCount;... }使用db2數(shù)據(jù)源的mybatis分頁(yè)插件的配置文件
spring.datasource.db2.extend.pagehelperDialect=Oracle spring.datasource.db2.extend.pagehelperReasonable=true spring.datasource.db2.extend.pagehelperSupportMethodsArguments=true spring.datasource.db2.extend.pagehelperOffsetAsPageNum=true spring.datasource.db2.extend.pagehelperRowBoundsWithCount=true spring.datasource.db2.extend.pagehelperParams=count=countSql;pageNum=pageNumKey;pageSize=pageSizeKey;使用db2數(shù)據(jù)源的mybatis分頁(yè)插件的@Configuration類
... @Configuration @ConfigurationProperties(prefix = "spring.datasource.db2.extend") public class Db2MybatisProperties {private String mybatisMapperLocations;private String pagehelperDialect;private String pagehelperReasonable;private String pagehelperSupportMethodsArguments;private String pagehelperParams;private String pagehelperOffsetAsPageNum;private String pagehelperRowBoundsWithCount;... }2,配置2個(gè)mybatis的SqlSessionFactory,增加分頁(yè)插件
PrimaryMybatisConfiguration
Db2MybatisConfiguration
@Configuration @MapperScan(basePackages = { "xxx.db2.mapper" },sqlSessionFactoryRef="db2SqlSessionFactory") public class Db2MybatisConfiguration {private Logger log = LoggerFactory.getLogger(this.getClass());@Autowiredprivate Db2MybatisProperties property;@Bean(name = "db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.db2")public DataSource dataSource() {log.info("config db2DataSource success.");return DataSourceBuilder.create().build();}@Bean(name = "db2SqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) {try {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(this.property.getMybatisMapperLocations()));//分頁(yè)插件Interceptor interceptor = new PageInterceptor();Properties properties = new Properties();properties.setProperty("helperDialect", this.property.getPagehelperDialect());properties.setProperty("reasonable", this.property.getPagehelperReasonable());properties.setProperty("supportMethodsArguments",this.property.getPagehelperSupportMethodsArguments());properties.setProperty("params",this.property.getPagehelperParams());interceptor.setProperties(properties);sessionFactory.setPlugins(new Interceptor[] {interceptor});log.info("config db2SqlSessionFactory success.");return sessionFactory.getObject();} catch (Exception e) {log.error("config db2SqlSessionFactory failure.", e);return null;}}@Bean(name = "db2SqlSessionTemplate")public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "db2TransactionManager")public DataSourceTransactionManager transactionManager(@Qualifier("db2DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);} }配置2個(gè)mybatis generator
1,在pom.xml中引入mybatis generator
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>...<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- mybatis generator 自動(dòng)生成代碼插件 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.2</version><configuration><overwrite>true</overwrite><verbose>true</verbose></configuration><dependencies><dependency><groupId>com.oracle.jdbc</groupId><artifactId>ojdbc7</artifactId><version>12.1.0.1</version></dependency></dependencies></plugin></plugins></build> </project>2, 配置2個(gè)mybatis generator配置文件。
使用db1數(shù)據(jù)源的mybatis generator的配置文件generatorConfig.xml.
使用db1數(shù)據(jù)源的mybatis generator的配置文件generatorConfig2.xml.
3,使用mvn執(zhí)行mybatis generator命令。
使用db1數(shù)據(jù)源的mybatis generator生成代碼命令
使用db2數(shù)據(jù)源的mybatis generator生成代碼命令
mvn -Dmybatis.generator.configurationFile=src/main/resources/generatorConfig2.xml mybatis-generator:generate總結(jié)
以上是生活随笔為你收集整理的【spring boot】 mybatis配置双数据源/多数据源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。