這才是SpirngBoot輕鬆整合MybatisPlus多資料來源的正確開啟方式

有一個這樣子的需求,線上正在跑的業務,由於業務發展需要,需重新開發一套新系統,等新系統開發完成後,需要無縫對接切換,當初具體設計見草圖。

這才是SpirngBoot輕鬆整合MybatisPlus多資料來源的正確開啟方式

新增依賴#

<!——lombok——> org。projectlombok lombok 1。18。16 <!——scope=provided,說明它是在編譯階段生效,不需要打入包中,Lombok在編譯期將帶Lombok註解的Java檔案正確編譯為完整的Class檔案——> provided <!——mysql——> mysql mysql-connector-java <!——mybatis plus和spring boot整合——> com。baomidou mybatis-plus-boot-starter 3。4。0 com。alibaba druid 1。1。10

application。properties#

server。port=9999spring。datasource。master。driver-class-name=com。mysql。cj。jdbc。Driverspring。datasource。master。url=jdbc:mysql://127。0。0。1/test?useUnicode=true&characterEncoding=utf-8&useSSL=falsespring。datasource。master。username=rootspring。datasource。master。password=rootspring。datasource。slave。driver-class-name=com。mysql。cj。jdbc。Driverspring。datasource。slave。jdbc-url=jdbc:mysql://127。0。0。1/test2?useUnicode=true&characterEncoding=utf-8&useSSL=falsespring。datasource。slave。username=rootspring。datasource。slave。password=root

2種方式建立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”); //申請連線時執行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包路徑!!!!!!

如果需要指定.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(); }

這才是SpirngBoot輕鬆整合MybatisPlus多資料來源的正確開啟方式

啟動類#

@SpringBootApplication( exclude = {DataSourceAutoConfiguration。class, MybatisPlusAutoConfiguration。class})

啟動類上排查,自動裝配,使用我們自定義的多資料來源!!!

演示#

這才是SpirngBoot輕鬆整合MybatisPlus多資料來源的正確開啟方式

這才是SpirngBoot輕鬆整合MybatisPlus多資料來源的正確開啟方式

多個數據源,同時也是支援事務的

原文連結:https://www。cnblogs。com/chenyanbin/p/15504125。html

作者:陳彥斌

如果覺得本文對你有幫助,可以轉發關注支援一下