SpringBoot +MybatisPlus集成多數(shù)據(jù)源的使用案例
引言
應(yīng)項(xiàng)目需求,需要引入另外的Mysql數(shù)據(jù)庫(kù),但是項(xiàng)目已經(jīng)引入一個(gè)Mysql,這時(shí)有幾種方案
- 通過(guò)Dynamic-DataSource 框架,無(wú)縫集成 但是是動(dòng)態(tài)切換數(shù)據(jù)源的,跟項(xiàng)目需求不符合,于是采取第二種
- 通過(guò)自定義數(shù)據(jù)源配置類,無(wú)縫引入多個(gè)數(shù)據(jù)源,并且基于文件目錄隔離
步驟
引入依賴
項(xiàng)目需要引入了MyBatis Plus即可,無(wú)需引入額外依賴
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.12</version>
</dependency>修改配置文件
spring:
datasource:
d1:
password: xxxx
username: xxxx
jdbc-url: jdbc:mysql://xxxx:3306/ecshop_wp?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver
d2:
password: root
username: root
jdbc-url: jdbc:mysql://127.0.0.1:3306/xg_bi_lcc?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
driver-class-name: com.mysql.cj.jdbc.Driver添加配置類
@Configuration
@MapperScan(basePackages = "xg.xx.model.front.service.mysql.mapper1", sqlSessionFactoryRef = "d1SqlSessionFactory")
public class EcshopWpDataSourceConfig {
@Bean(name = "d1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.d1")
public DataSource ecshopWpDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "d1SqlSessionFactory")
public SqlSessionFactory ecshopWpSqlSessionFactory(@Qualifier("d1DataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
//configuration配置bean
//MybatisConfiguration configuration = new MybatisConfiguration();
//configuration.setMapUnderscoreToCamelCase(true);
//configuration.setCacheEnabled(false);
// 配置打印sql語(yǔ)句s
//configuration.setLogImpl(StdOutImpl.class);
// 添加自定義SQL注入
//bean.setConfiguration(configuration);
//插件對(duì)象
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//動(dòng)態(tài)表名
//DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
//可以傳多個(gè)表名參數(shù),指定哪些表使用MonthTableNameHandler處理表名稱
//dynamicTableNameInnerInterceptor.setTableNameHandler(new MonthTableNameHandler("t_table_name"));
//以攔截器的方式處理表名稱
//可以傳遞多個(gè)攔截器,即:可以傳遞多個(gè)表名處理器TableNameHandler
//mybatisPlusInterceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
//分頁(yè)插件
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
bean.setDataSource(dataSource);
// 設(shè)置mybatis的xml所在位置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/d1/*.xml"));
bean.setPlugins(mybatisPlusInterceptor);
return bean.getObject();
}
@Bean(name = "d1TransactionManager")
public DataSourceTransactionManager ecshopWpTransactionManager(@Qualifier("d1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}@Configuration
@MapperScan(basePackages = "xg.xx.model.front.service.mysql.Mapper2", sqlSessionFactoryRef = "d2SqlSessionFactory")
public class XgBiLccDataSourceConfig {
@Bean(name = "d2DataSource")
@ConfigurationProperties(prefix = "spring.datasource.d2")
public DataSource ecshopWpDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "d2SqlSessionFactory")
public SqlSessionFactory ecshopWpSqlSessionFactory(@Qualifier("d2DataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
//configuration配置bean
//MybatisConfiguration configuration = new MybatisConfiguration();
//configuration.setMapUnderscoreToCamelCase(true);
//configuration.setCacheEnabled(false);
// 配置打印sql語(yǔ)句s
//configuration.setLogImpl(StdOutImpl.class);
// 添加自定義SQL注入
//bean.setConfiguration(configuration);
//插件對(duì)象
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
//動(dòng)態(tài)表名
//DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
//可以傳多個(gè)表名參數(shù),指定哪些表使用MonthTableNameHandler處理表名稱
//dynamicTableNameInnerInterceptor.setTableNameHandler(new MonthTableNameHandler("t_table_name"));
//以攔截器的方式處理表名稱
//可以傳遞多個(gè)攔截器,即:可以傳遞多個(gè)表名處理器TableNameHandler
//mybatisPlusInterceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
//分頁(yè)插件
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
bean.setDataSource(dataSource);
// 設(shè)置mybatis的xml所在位置
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/d2/*.xml"));
bean.setPlugins(mybatisPlusInterceptor);
return bean.getObject();
}
@Bean(name = "d2TransactionManager")
public DataSourceTransactionManager ecshopWpTransactionManager(@Qualifier("d2DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}使用案例
@Transactional
@Transactional(value = "d2TransactionManager", rollbackFor = Exception.class) 這樣即可進(jìn)行全局事物管理
到此這篇關(guān)于SpringBoot +MybatisPlus集成多數(shù)據(jù)源的文章就介紹到這了,更多相關(guān)SpringBoot MybatisPlus多數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot+MybatisPlus+jdbc連接池配置多數(shù)據(jù)源的實(shí)現(xiàn)
- springboot集成mybatisPlus+多數(shù)據(jù)源的實(shí)現(xiàn)示例
- SpringBoot3.0集成MybatisPlus的實(shí)現(xiàn)方法
- SpringBoot連接PostgreSQL+MybatisPlus入門(mén)案例(代碼詳解)
- SpringBoot項(xiàng)目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫(kù)的過(guò)程
- SpringBoot整合MybatisPlus的基本應(yīng)用詳解
- SpringBoot整合MybatisPlus的簡(jiǎn)單教程實(shí)現(xiàn)(簡(jiǎn)單整合)
相關(guān)文章
Intellij Idea中批量導(dǎo)入第三方j(luò)ar包的全過(guò)程
引入jar包一般都是針對(duì)小的java項(xiàng)目,這篇文章主要給大家介紹了關(guān)于Intellij Idea中批量導(dǎo)入第三方j(luò)ar包的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
九個(gè)動(dòng)畫(huà)組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表
數(shù)據(jù)結(jié)構(gòu)和算法是密不可分的,兩者往往是相輔相成的存在,所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)過(guò)程中,不免會(huì)遇到各種算法,數(shù)據(jù)結(jié)構(gòu)常用操作一般為:增刪改查。基本上所有的數(shù)據(jù)結(jié)構(gòu)都是圍繞這幾個(gè)操作進(jìn)行展開(kāi),本文用九張動(dòng)圖來(lái)闡述先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)2021-08-08
基于SpringBoot+SpringAI+Ollama開(kāi)發(fā)智能問(wèn)答系統(tǒng)
在人工智能技術(shù)飛速發(fā)展的今天,大語(yǔ)言模型(LLM)已成為開(kāi)發(fā)者工具箱中不可或缺的一部分,本文將介紹如何利用SpringBoot、SpringAI框架結(jié)合Ollama本地大模型服務(wù),搭建一個(gè)完全運(yùn)行在本地Windows環(huán)境下的智能問(wèn)答系統(tǒng),有需要的可以了解下2025-06-06
centos下GitLab+Jenkins持續(xù)集成環(huán)境搭建(安裝jenkins)
這篇文章主要為大家詳細(xì)介紹了centos下搭建GitLab+Jenkins持續(xù)集成環(huán)境,安裝jenkins的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Java代碼性能測(cè)試實(shí)戰(zhàn)之ContiPerf安裝使用
這篇文章主要為大家介紹了Java代碼性能測(cè)試實(shí)戰(zhàn)之ContiPerf安裝使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
JAVA spark創(chuàng)建DataFrame的方法
這篇文章主要介紹了JAVA spark創(chuàng)建DataFrame的方法,幫助大家更好的理解和學(xué)習(xí)spark,感興趣的朋友可以了解下2020-08-08

