1. 程式人生 > >springboot+mybatis使用多資料來源的配置

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 在者我的工程是多資料來源工程,這是導致這個配置沒有生效的原因,因為他不知道為哪個資料來源開啟駝峰命名 所以我們需要在配置多資料來源的檔案

SpringBootMyBatis 資料來源配置

最近在專案開發中,需要為一個使用 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動態切換,感覺有點小複雜,其實