日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【spring boot】 mybatis配置双数据源/多数据源

發(fā)布時間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【spring boot】 mybatis配置双数据源/多数据源 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

  • spring boot 2.0.0.RELEASE
  • maven 3.5
  • eclipse 4.9.0
  • mybatis 1.3.2
  • mybatis generator 1.3.2
  • pagehelper(mybatis 分頁插件) 1.2.5
  • oracle 12c

在spring boot項目中,使用mybatis操作數(shù)據(jù)庫,很方便。經(jīng)過親測,比jpa好用。
mybatis提供了代碼生成器mybatis generator。使用mybatis generator可以很方便的生成mybatis代碼。
mybatis分頁插件Mybatis-PageHelper,很好的解決了分頁問題。
spring boot項目默認提供1個數(shù)據(jù)源,多個數(shù)據(jù)源時,需要手動進行一些處理,如下。

概念

  • 數(shù)據(jù)源:javax.sql.DataSource類型。起到作為連接數(shù)據(jù)庫的橋梁的作用。
  • mybatis SessionFactory:org.apache.ibatis.session.SqlSessionFactory類型。mybatis通過該類獲取數(shù)據(jù)源。
  • Mybatis PageHelper:mybatis分頁插件,通過該插件可以很方便的實現(xiàn)分頁。
  • mybatis generator:mybatis代碼生成工具,通過該工具可以很方便的生成mybatis代碼。

步驟簡述

  • 先配置2個數(shù)據(jù)源,分別連2個數(shù)據(jù)庫。
  • 再配置2個mybatis,使mybatis能夠工作。
  • 然后配置2個mybatis的分頁插件,可以使用pagehelper處理分頁。
  • 最后,配置2個mybatis generator,能夠生成2個mybatis的代碼。

配置2個數(shù)據(jù)源

spring boot AutoConfigure提供的DataSourceAutoConfiguration類,自動配置數(shù)據(jù)源。因此,先禁用DataSourceAutoConfiguration類。

... @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class}) ... public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }

假設(shè),要配置兩個數(shù)據(jù)源,連接兩個數(shù)據(jù)庫,分別為db1、db2,需要做如下操作:
1,在application.properties配置文件中添加如下db1和db2的jdbc配置。

spring.datasource.db1.driverClassName =oracle.jdbc.OracleDriver spring.datasource.db1.jdbcUrl=jdbc:oracle:thin:@<db1 ip>/db1 spring.datasource.db1.username=xxx spring.datasource.db1.password=xxx spring.datasource.db1.platform=oraclespring.datasource.db2.driverClassName =oracle.jdbc.OracleDriver spring.datasource.db2.jdbcUrl=jdbc:oracle:thin:@<db2 ip>/db2 spring.datasource.db2.username=xxx spring.datasource.db2.password=xxx spring.datasource.db2.platform=oracle

2,添加db1數(shù)據(jù)源配置類PrimaryMybatisConfiguration,db2數(shù)據(jù)源配置類Db2MybatisConfiguration。
3,類PrimaryMybatisConfiguration中,添加db1 DataSourcebean。類Db2MybatisConfiguration中,添加db2 DataSourcebean。
PrimaryMybatisConfiguration

@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.db1")@Primarypublic DataSource dataSource() {log.info("config primaryDataSource success.");return DataSourceBuilder.create().build();}

Db2MybatisConfiguration

@Bean(name = "db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.db2")public DataSource dataSource() {log.info("config db2DataSource success.");return DataSourceBuilder.create().build();}

至此,兩個數(shù)據(jù)源(db1、db2),添加完成。
注:上面代碼中,默認的數(shù)據(jù)源實現(xiàn)類:com.zaxxer.hikari.HikariDataSource。

配置2個mybatis

mybatis spring boot AutoConfigure提供的MybatisAutoConfiguration類,自動配置Mybatis。因此,先禁用MybatisAutoConfiguration類。

... @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class}) ... public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }

假設(shè),要配置兩個mybatis,分別使用db1數(shù)據(jù)源、db2數(shù)據(jù)源,需要做如下操作:
1,在application.properties配置文件中添加如下2個mybatis配置和對應(yīng)的@Configuration類。
使用db1數(shù)據(jù)源的mybatis的配置文件

spring.datasource.db1.extend.mybatisMapperLocations=classpath:config/mybatis/mapper/*.xml

使用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個mybatis的SqlSessionFactory
PrimaryMybatisConfiguration

@Configuration @MapperScan(basePackages = { "xxx.db.mapper" },sqlSessionFactoryRef="primarySqlSessionFactory") public class PrimaryMybatisConfiguration {private Logger log = LoggerFactory.getLogger(this.getClass());@Autowiredprivate PrimaryMybatisProperties property;@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.db1")@Primarypublic DataSource dataSource() {log.info("config primaryDataSource success.");return DataSourceBuilder.create().build();}@Bean(name = "primarySqlSessionFactory")@Primarypublic SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) {try {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(this.property.getMybatisMapperLocations()));log.info("config primarySqlSessionFactory success.");return sessionFactory.getObject();} catch (Exception e) {log.error("config primarySqlSessionFactory failure.", e);return null;}}@Bean(name = "primarySqlSessionTemplate")@Primarypublic SqlSessionTemplate testSqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "primaryTransactionManager")@Primarypublic DataSourceTransactionManager transactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);} }

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個mybatis的SqlSessionFactory已配置完成。此時,2個mybatis已經(jīng)可以工作。接下來需要配置分頁插件。

配置2個mybatis的分頁插件

pagehelper spring boot AutoConfigure提供的PageHelperAutoConfiguration類,自動配置Mybatis的分頁插件。因此,先禁用PageHelperAutoConfiguration類。

... @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class, PageHelperAutoConfiguration.class }) ... public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }

假設(shè),要配置兩個mybatis的分頁插件,需要做如下操作:
1,在application.properties配置文件中添加如下2個mybatis分頁插件的配置和對應(yīng)的@Configuration類。
使用db1數(shù)據(jù)源的mybatis分頁插件的配置文件

spring.datasource.db1.extend.pagehelperDialect=Oracle spring.datasource.db1.extend.pagehelperReasonable=true spring.datasource.db1.extend.pagehelperSupportMethodsArguments=true spring.datasource.db1.extend.pagehelperOffsetAsPageNum=true spring.datasource.db1.extend.pagehelperRowBoundsWithCount=true spring.datasource.db1.extend.pagehelperParams=count=countSql;pageNum=pageNumKey;pageSize=pageSizeKey;

使用db1數(shù)據(jù)源的mybatis分頁插件的@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分頁插件的配置文件

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分頁插件的@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個mybatis的SqlSessionFactory,增加分頁插件
PrimaryMybatisConfiguration

@Configuration @MapperScan(basePackages = { "xxx.db.mapper" },sqlSessionFactoryRef="primarySqlSessionFactory") public class PrimaryMybatisConfiguration {private Logger log = LoggerFactory.getLogger(this.getClass());@Autowiredprivate PrimaryMybatisProperties property;@Bean(name = "primaryDataSource")@ConfigurationProperties(prefix = "spring.datasource.db1")@Primarypublic DataSource dataSource() {log.info("config primaryDataSource success.");return DataSourceBuilder.create().build();}@Bean(name = "primarySqlSessionFactory")@Primarypublic SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) {try {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(this.property.getMybatisMapperLocations()));//分頁插件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 primarySqlSessionFactory success.");return sessionFactory.getObject();} catch (Exception e) {log.error("config primarySqlSessionFactory failure.", e);return null;}}@Bean(name = "primarySqlSessionTemplate")@Primarypublic SqlSessionTemplate testSqlSessionTemplate(@Qualifier("primarySqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean(name = "primaryTransactionManager")@Primarypublic DataSourceTransactionManager transactionManager(@Qualifier("primaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);} }

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()));//分頁插件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個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 自動生成代碼插件 --><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個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生成代碼命令

mvn -Dmybatis.generator.configurationFile=src/main/resources/generatorConfig.xml mybatis-generator:generate

使用db2數(shù)據(jù)源的mybatis generator生成代碼命令

mvn -Dmybatis.generator.configurationFile=src/main/resources/generatorConfig2.xml mybatis-generator:generate

總結(jié)

以上是生活随笔為你收集整理的【spring boot】 mybatis配置双数据源/多数据源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。