SpringBoot整合Mybatis Plus多數(shù)據(jù)源的實現(xiàn)示例
導讀
有一個這樣子的需求,線上正在跑的業(yè)務,由于業(yè)務發(fā)展需要,需重新開發(fā)一套新系統(tǒng),等新系統(tǒng)開發(fā)完成后,需要無縫對接切換,當初具體設計見草圖。

添加依賴
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<!--scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok注解的Java文件正確編譯為完整的Class文件-->
<scope>provided</scope>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis plus和spring boot整合-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
application.properties
server.port=9999 spring.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.master.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.master.username=root spring.datasource.master.password=root spring.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.slave.jdbc-url=jdbc:mysql://127.0.0.1/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.slave.username=root spring.datasource.slave.password=root
2種方式創(chuàng)建DataSource
Master配置,使用druid連接池
import com.alibaba.druid.pool.DruidDataSource;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.env.Environment;
import javax.sql.DataSource;
/**
* @Author:chenyanbin
*/
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
@Autowired
private Environment env;
@Primary
@Bean(name = "masterDataSource")
// @ConfigurationProperties("spring.datasource.master")
public DataSource masterDataSource() {
// return DataSourceBuilder.create().build();
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(env.getProperty("spring.datasource.master.url"));
dataSource.setUsername(env.getProperty("spring.datasource.master.username"));
dataSource.setPassword(env.getProperty("spring.datasource.master.password"));
dataSource.setDriverClassName(env.getProperty("spring.datasource.master.driver-class-name"));
//配置初始化大小、最小、最大
dataSource.setMinIdle(10);
//配置初始化大小、最小、最大
dataSource.setMaxActive(200);
//配置初始化大小、最小、最大
dataSource.setInitialSize(10);
//配置獲取連接等待超時的時間
dataSource.setMaxWait(60000);
//配置一個連接在池中最小生存的時間,單位是毫秒
dataSource.setMinEvictableIdleTimeMillis(300000);
//配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
dataSource.setTimeBetweenEvictionRunsMillis(60000);
//默認的testWhileIdle=true,testOnBorrow=false,testOnReturn=false
dataSource.setValidationQuery("SELECT 1");
//申請連接時執(zhí)行validationQuery檢測連接是否有效
dataSource.setTestOnBorrow(false);
//建議配置為true,不影響性能,并且保證安全性。
dataSource.setTestWhileIdle(true);
//是否緩存preparedStatement,也就是PSCache
dataSource.setPoolPreparedStatements(false);
return dataSource;
}
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean.getObject();
}
}
Slave配置
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @Author:chenyanbin
*/
@Configuration
@MapperScan(basePackages = "com.example.demo.mapper2",sqlSessionFactoryRef = "slaveSqlSessionFactory")
public class SlaveDataSourceConfig {
@Bean(name = "slaveDataSource")
@ConfigurationProperties("spring.datasource.slave")
public DataSource slaveDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "slaveSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("slaveDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
return sessionFactoryBean.getObject();
}
}
注意
master和slave掃描不同的mapper包路徑?。。。。。?/p>
如果需要指定.xml文件,需這樣配置?。?!
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/**/*.xml"));
return sessionFactoryBean.getObject();
}

MybatisPlus分頁插件設置
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* MybatisPlus分頁配置
*
* @Author:chenyanbin
*/
@Configuration
public class MybatisPlusPageConfig {
/**
* 新版分頁插件
*
* @return
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
@Bean(name = "masterSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(
@Qualifier("masterDataSource") DataSource dataSource,
@Qualifier("mybatisPlusInterceptor") MybatisPlusInterceptor mybatisPlusInterceptor
) throws Exception {
MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper/**/*.xml"));
sessionFactoryBean.setPlugins(mybatisPlusInterceptor);
return sessionFactoryBean.getObject();
}
啟動類
@SpringBootApplication(
exclude = {DataSourceAutoConfiguration.class, MybatisPlusAutoConfiguration.class}
)
啟動類上排查,自動裝配,使用我們自定義的多數(shù)據(jù)源?。?!
演示


多個數(shù)據(jù)源,同時也是支持事務的
到此這篇關于SpirngBoot整合Mybatis Plus多數(shù)據(jù)源的實現(xiàn)示例的文章就介紹到這了,更多相關SpirngBoot MybatisPlus多數(shù)據(jù)源內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Springboot多數(shù)據(jù)源配置之整合dynamic-datasource方式
- SpringBoot整合Mybatis實現(xiàn)多數(shù)據(jù)源配置與跨數(shù)據(jù)源事務實例
- Springboot整合JPA配置多數(shù)據(jù)源流程詳解
- SpringBoot+Mybatis plus實現(xiàn)多數(shù)據(jù)源整合的實踐
- SpringBoot使用Atomikos技術整合多數(shù)據(jù)源的實現(xiàn)
- SpringBoot2整合JTA組件實現(xiàn)多數(shù)據(jù)源事務管理
- Springboot整合多數(shù)據(jù)源代碼示例詳解
- Springboot整合多數(shù)據(jù)源配置流程詳細講解
相關文章
MyBatisPlus唯一索引批量新增或修改的實現(xiàn)方法
本文主要介紹了MyBatisPlus唯一索引批量新增或修改的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-03-03
Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)的問題(附github源碼)
這篇文章主要介紹了Springboot 整合通用mapper和pagehelper展示分頁數(shù)據(jù)(附github源碼),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
Java后臺返回和處理JSon數(shù)據(jù)的方法步驟
這篇文章主要介紹了Java后臺返回和處理JSon數(shù)據(jù)的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09
JAVA 文件監(jiān)控 WatchService的示例方法
本篇文章主要介紹了JAVA 文件監(jiān)控 WatchService的示例方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
SpringBoot2.0集成MQTT消息推送功能實現(xiàn)
這篇文章主要介紹了SpringBoot2.0集成MQTT消息推送功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04
MybatisPlus實現(xiàn)對象嵌套關聯(lián)查詢一對多List集合查詢
這篇文章主要介紹了MybatisPlus實現(xiàn)對象嵌套關聯(lián)查詢一對多List集合查詢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05

