springboot+mybatis使用多資料來源的配置
背景:
之前做的xx系統中,新增了某些需求,需求的實現基於多個數據庫的操作,即需要連線多資料來源,然後開始了百度大法!以下就是整理總結的springboot使用多資料來源的配置。當然配置好,也可以正常使用後,又出現了某些小bug,這些將在後面進行介紹。
下面以配置兩個資料庫test1、test2為例,進行配置講解。
配置步驟:
- 1 修改application.properties配置檔案中的資料庫連線
#資料庫設定
#pa資料庫(做為主資料庫)
spring.datasource.pa.url=jdbc:mysql://localhost:3306/pa_db?useUnicode=true&characterEncoding=utf-8
spring.datasource.pa.username=root
spring.datasource.pa.password=root
spring.datasource.pa.driver-class-name=com.mysql.jdbc.Driver
#cas資料庫
spring.datasource.cas.url=jdbc:mysql://localhost:3306/cas_user_db?useUnicode=true&characterEncoding=utf-8
spring.datasource.cas.username=root
spring.datasource.cas.password=root
spring.datasource.cas.driver-class -name=com.mysql.jdbc.Driver
- 2 配置兩個資料庫對應的資料來源
以下為具體的配置程式碼,其中註釋部分的內容很重要,沒有進行手動配置的話可能會報錯!
/*pa資料庫*/
@Configuration
@MapperScan(basePackages = "com.hobbes.pa.mapper", sqlSessionTemplateRef = "paSqlSessionTemplate")
public class DataSource1Config {
@Bean(name = "paDataSource")
@ConfigurationProperties (prefix = "spring.datasource.pa")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "paSqlSessionFactory")
@Primary /*此處必須在主資料庫的資料來源配置上加上@Primary*/
public SqlSessionFactory testSqlSessionFactory(@Qualifier("paDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/*載入mybatis全域性配置檔案*/
bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
/*載入所有的mapper.xml對映檔案*/
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "paTransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("paDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "paSqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("paSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
/*cas資料庫*/
@Configuration
@MapperScan(basePackages = "com.hobbes.pa.mapper2", sqlSessionTemplateRef = "casSqlSessionTemplate")
public class DataSource2Config {
@Bean(name = "casDataSource")
@ConfigurationProperties(prefix = "spring.datasource.cas")
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "casSqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("casDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/*載入mybatis全域性配置檔案*/
bean.setConfigLocation(new PathMatchingResourcePatternResolver().getResource("classpath:mybatis/mybatis-config.xml"));
/*載入所有的mapper.xml對映檔案*/
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml"));
return bean.getObject();
}
@Bean(name = "casTransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("casDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "casSqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("casSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
- 3 刪除專案入口類上的@MapperScan動態掃描
將
@MapperScan
替換為
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
到此步驟其實就已經完成了多資料來源的配置,並且可以正常使用
但
是
服務啟動之後第二天訪問就報錯了 ≖‿≖✧
具體錯誤資訊早晨剛給刪掉了( ´◔ ‸◔`)
所以看了瀏覽記錄的話大概是這幾個錯誤之中的一個或多個ԅ(¯﹃¯ԅ)
後面會給出解決方法
↓
↓
↓
Cannot connect to Database server (mysql workbench).
Communications link failure.The last packet successfully received from the server was xxxx milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException.
- 4 錯誤/異常解決
上面出現的異常/錯誤的原因是因為mysql資料庫預設的wait_time
是8個小時,也就是說mysql資料庫會在沒有任何操作後的8個小時就會自動斷開連線,然後就連不上資料了(`д′)
mysql5.0以下版本的解決辦法:
/*在資料庫url後面加上autoReconnect=true*/
/*因為身邊沒有安裝mysql5.0以下版本的電腦,所有沒有測試該解決方法,大家可以試一試*/
spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true
mysql5.0以上版本的解決辦法:
/*在application.properties配置檔案中加入相應的連線池配置,主要是最後五個屬性*/
#pa資料庫連線池配置
spring.datasource.pa.max-wait=10000
spring.datasource.pa.max-idle=8
spring.datasource.pa.min-idle=8
spring.datasource.pa.initial-size=10
spring.datasource.pa.max-active=20
spring.datasource.pa.test-on-borrow=true
spring.datasource.pa.test-while-idle=true
spring.datasource.pa.validation-query=SELECT 1 FROM DUAL
spring.datasource.pa.time-between-eviction-runs-millis=300000
spring.datasource.pa.min-evictable-idle-time-millis=1800000
#cas資料庫連線池配置
spring.datasource.cas.max-wait=10000
spring.datasource.cas.max-idle=8
spring.datasource.cas.min-idle=8
spring.datasource.cas.initial-size=10
spring.datasource.cas.max-active=20
spring.datasource.cas.test-on-borrow=true
spring.datasource.cas.test-while-idle=true
spring.datasource.cas.validation-query=SELECT 1 FROM DUAL
spring.datasource.cas.time-between-eviction-runs-millis=300000
spring.datasource.cas.min-evictable-idle-time-millis=1800000
相關推薦
springboot+mybatis多資料來源配置,AOP註解動態切換資料來源
轉載至:https://blog.csdn.net/xiaosheng_papa/article/details/80218006 親測有效。 注:有些系統中已經配置了單資料來源,現在要轉成多資料來源,可能需要額外的配置。拿我自己當前專案來說: 專案在啟動類中配置了單資料來源:
基於SpirngBoot2.0+ 的 SpringBoot+Mybatis 多資料來源配置
Github 地址:github.com/Snailclimb/…(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂並且能夠在看完之後獨立實踐。基於最新的 SpringBoot2.0+,是你學習SpringBoot 的最佳指南。) ,歡迎各位 Star。
新手也能看懂,基於SpirngBoot2.0+ 的 SpringBoot+Mybatis 多資料來源配置
Github 地址:https://github.com/Snailclimb/springboot-integration-examples(SpringBoot和其他常用技術的整合,可能是你遇到的講解最詳細的學習案例,力爭新手也能看懂並且能夠在看完之後獨立實踐。基於最新的 S
springboot+mybatis多資料來源配置實現
簡單實現了根據註解動態切換資料來源,支援同一個資料庫的宣告式事務,但不支援JTA事務。處理流程: 根據配置的資料來源資訊,建立動態資料來源bean 利用DataSourceAspect處理@DataSource註解,設定當前要使用的具體資料來源 pom.xm
springboot+mybatis多資料來源配置方法及遇到的問題
這裡做的測試,兩個資料庫內表都一樣 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"
SpringBoot中多資料來源 配置mybatis 駝峰命名不管用,帶下劃線欄位返回null值
在springboot中 開啟是自動轉換,但是,這個配置根本沒有生效, 當查出來的資料時,只要欄位名中有 下劃線的欄位, 就會出現 null 在者我的工程是多資料來源工程,這是導致這個配置沒有生效的原因,因為他不知道為哪個資料來源開啟駝峰命名 所以我們需要在配置多資料來源的檔案
SpringBoot 的 MyBatis 多資料來源配置
最近在專案開發中,需要為一個使用 MySQL 資料庫的 SpringBoot 專案,新新增一個 PLSQL 資料庫資料來源,那麼就需要進行 SpringBoot 的多資料來源開發。程式碼很簡單,下面是實現的過程。 ## 環境準備 實驗環境: - JDK 1.8 - SpringBoot 2.4.1 -
實現SpringBoot的多資料來源配置
【場景】 當業務資料量達到了一定程度,DBA 需要合理配置資料庫資源。即配置主庫的機器高配置,把核心高頻的資料放在主庫上;把次要的資料放在從庫,低配置。 –(引自 https://www.cnblogs.com/Alandre/p/6611813.html 泥瓦匠BYSocket
Mybatis(攔截器實現)通用mapper及全ORM實現(五)-- springboot+mybatis多資料來源設定
本篇實際上和mybatisext專案並沒有太大關係了,但在實際專案中脫離不開多個數據源,尤其是主從分離,同樣網上一些資料大同小異而且大部分並不能真正解決問題,所以單獨提出來說一下 假設我們就是要解決一個主從分離,資料來源定義在了application.properties中
Spring Boot + Mybatis 多資料來源配置實現讀寫分離
本文來自網易雲社群作者:王超應用場景:專案中有一些報表統計與查詢功能,對資料實時性要求不高,因此考慮對報表的統計與查詢去操作slave db,減少對master的壓力。根據網上多份資料測試發現總是使用master資料來源,無法切換到slave,經過多次除錯修改現已完美通過,現
SpringBoot的多資料來源配置
在專案中需要在不同的IP裡的資料庫獲取資料,所以要求要可以靈活的指定具體要操作的資料庫。 主要使用的框架是spring-boot+mybatis等。 一:先將maven專案配置好(略); 二:springboot的啟動類: import org.apache.log4j.Lo
spring mybatis 多資料來源配置
1、建立好資料庫的配置檔案 mysql.url=jdbc:mysql://***/***?useUnicode=true&characterEncoding=UTF-8 mysql.username=*** mysql.password=*** mysql.driverClassName=co
Spring+MyBatis多資料來源配置實現
最近用到了MyBatis配置多資料來源,原以為簡單配置下就行了,實際操作後發現還是要費些事的,這裡記錄下,以作備忘 不多廢話,直接上程式碼,後面會有簡單的實現介紹 jdbc和log4j的配置 #定義輸出格式 ConversionPattern=
springboot + mybatis 多資料來源
1:首先在springboot的 main啟動類上加 // boot自帶的DataSourceAutoConfiguration禁掉,因為它會讀取application.properties檔案的spring.datasource.*屬性並自動配置單資料來源。在@Sprin
eclipse 使用maven 搭建 springboot+mybatis + 多資料來源
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(19) NOT NULL auto_increment, `loginname` varchar(64) default NULL, `name` varchar(64)
spring boot druid mybatis 多資料來源配置
1.application.properties spring.datasource.url = jdbc\:mysql\://192.168.1.1\:3306/business?autoRconnect\=true&useUnicode\=true&ch
springMVC+Mybatis多資料來源配置
每個MapperScannerConfigurer配置新增屬性節點 <property name="sqlSessionFactory" ref="SqlSessionFactory01"></property> ,ref引入相應的會話工廠bean。 <!--01
spring-boot (四) springboot+mybatis多資料來源最簡解決方案
配置檔案 pom包就不貼了比較簡單該依賴的就依賴,主要是資料庫這邊的配置: mybatis.config-locations=classpath:mybatis/mybatis-config.xml spring.datasource.test1.driverClassName = com.
Spring+MyBatis多資料來源配置實現(mysql和sqlserver資料庫)
最近用到了MyBatis配置多資料來源,原以為簡單配置下就行了,實際操作後發現還是要費些事的,這裡記錄下,以作備忘 不多廢話,直接上程式碼,後面會有簡單的實現介紹 jdbc和log4j的配置 #定義輸出格式 ConversionPattern=%d %-5p [%t] %c - %m%n log4j.
springboot(七):springboot+mybatis多資料來源最簡解決方案
說起多資料來源,一般都來解決那些問題呢,主從模式或者業務比較複雜需要連線不同的分庫來支援業務。我們專案是後者的模式,網上找了很多,大都是根據jpa來做多資料來源解決方案,要不就是老的spring多資料來源解決方案,還有的是利用aop動態切換,感覺有點小複雜,其實