最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解SpringBoot Mybatis如何對接多數(shù)據(jù)源

 更新時(shí)間:2023年09月26日 09:10:15   作者:戰(zhàn)斧  
這篇文章主要為大家介紹了SpringBoot Mybatis如何對接多數(shù)據(jù)源實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在我們開發(fā)一些具有綜合功能的項(xiàng)目時(shí),往往會碰到一種情況,需要同時(shí)連接多個(gè)數(shù)據(jù)庫,這個(gè)時(shí)候就需要用到多數(shù)據(jù)源的設(shè)計(jì)。而Spring 與 Myabtis 其實(shí)做了多數(shù)據(jù)源的適配,只需少許改動(dòng)即可對接多數(shù)據(jù)源。本期我們就貼近實(shí)戰(zhàn),以一個(gè)單數(shù)據(jù)源的Demo為例,講述將其改為多數(shù)據(jù)源項(xiàng)目的過程,希望大家能有所體會

一、數(shù)據(jù)源的定義

數(shù)據(jù)源(Data Source)是指數(shù)據(jù)存儲的地方,大多數(shù)情況是指數(shù)據(jù)庫,不過文件服務(wù)器、傳感器、API等也能算數(shù)據(jù)源,主要是提供了對數(shù)據(jù)的訪問和操作。數(shù)據(jù)源中存儲了所有建立數(shù)據(jù)庫連接的信息。就像通過指定文件名稱可以在文件系統(tǒng)中找到文件一樣,通過提供正確的數(shù)據(jù)源名稱,你可以找到相應(yīng)的數(shù)據(jù)庫連接

二、單數(shù)據(jù)源配置

因?yàn)镾pringBoot對數(shù)據(jù)源有著高度的默認(rèn)配置,只配置一個(gè)數(shù)據(jù)源時(shí),該數(shù)據(jù)源會被作為默認(rèn),所以對接單數(shù)據(jù)源其實(shí)是非常簡單的。如果你的工程采用的yaml格式配置文件,我們僅需做如下配置:

spring:
  #數(shù)據(jù)庫連接配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springtest
    username: root
    password: root

如果是采用properties配置文件的也是一樣的:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springtest
spring.datasource.username=root
spring.datasource.password=root

三、如何配置多數(shù)據(jù)源

1. 工程層級調(diào)整

我們以曾經(jīng)搭建的工程為原始模板,進(jìn)行對接多數(shù)據(jù)源的操作。沒看過的可以點(diǎn)此查看: 從零開始,手把手教你搭建Spring Boot后臺工程并說明

因?yàn)閮H變動(dòng)數(shù)據(jù)源,所以我們不改動(dòng)其他層級,僅僅將 mapper 拆為 mapper1 與 mapper2 兩部分

2. Spring項(xiàng)目配置

然后我們需要在 application.properties 或者 application.yml 中定義多個(gè)數(shù)據(jù)源:

spring:
  #數(shù)據(jù)庫連接配置
  datasource1:
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://127.0.0.1:3306/springtest2
    username: root
    password: root
  datasource2:
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://127.0.0.1:3306/springtest
    username: root
    password: root

這里有兩個(gè)細(xì)節(jié)需要注意:

  • 因?yàn)槲覀儧Q定使用雙數(shù)據(jù)源,所以把數(shù)據(jù)源的連接配置改成了datasource1 和 datasource2。而不再保留datasource,這樣SpringBoot就不再會為我們設(shè)定默認(rèn)數(shù)據(jù)庫
  • 因?yàn)槲覀兡壳安捎玫?nbsp;springBoot2.5.2,默認(rèn)的連接池為Hikari,該連接池?cái)?shù)據(jù)源的地址字段為jdbc-url 而非 url。在只有單個(gè)數(shù)據(jù)源時(shí),SpringBoot走默認(rèn)數(shù)據(jù)源邏輯為我們把 url 與 jdbc-url 進(jìn)行映射,保證我們獲得數(shù)據(jù)源。此時(shí)我們自己設(shè)置的數(shù)據(jù)源沒有進(jìn)行映射處理,就需要保證字段符合Hikari的要求。否則會出現(xiàn) java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName 異常

3. 會話配置

僅有配置文件可不行,接下來,我們需要在代碼中讀取到配置,并建立兩個(gè)數(shù)據(jù)源。如下,每個(gè)數(shù)據(jù)源都有隔離的mapper接口、xml文件、會話工廠及會話模板

第一個(gè)數(shù)據(jù)源 如下(示例):

@Configuration
@MapperScan(basePackages = "com.zhanfu.springboot.demo.mapper1", sqlSessionFactoryRef = "sqlSessionFactory1")
public class DataSource1Config {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    public SqlSessionFactory sqlSessionFactory1() throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource1());
        String locationPattern = "classpath*:/mapper1/*.xml";
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactoryBean.setMapperLocations(resolver.getResources(locationPattern));
        return sessionFactoryBean.getObject();
    }
    @Bean(name = "sqlSessionTemplate1")
    public SqlSessionTemplate sqlSessionTemplate1(@Qualifier("sqlSessionFactory1") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

配置第二個(gè)數(shù)據(jù)源 DataSource2Config

@Configuration
@MapperScan(basePackages = "com.zhanfu.springboot.demo.mapper2", sqlSessionFactoryRef = "sqlSessionFactory2")
public class DataSource2Config {
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    public SqlSessionFactory sqlSessionFactory2() throws Exception {
        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(dataSource2());
        String locationPattern = "classpath*:/mapper2/*.xml";
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactoryBean.setMapperLocations(resolver.getResources(locationPattern));
        return sessionFactoryBean.getObject();
    }
    @Bean(name = "sqlSessionTemplate2")
    public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    @Bean(name = "productMapper")
    public ProductMapper mapper2(@Qualifier("sqlSessionTemplate2") SqlSessionTemplate sqlSessionTemplate) throws Exception {
        return sqlSessionTemplate.getMapper(ProductMapper.class);
    }
}

4. 事務(wù)管理器

為兩個(gè)數(shù)據(jù)源分別配置自己的事務(wù)管理器,如果你的項(xiàng)目里通篇沒有方法級別的事務(wù)(一個(gè)SQL就是一個(gè)事務(wù)),那不設(shè)置這個(gè)也不影響,否則還是建議加上。

@Configuration
public class TransactionManagerConfig {
    @Autowired
    private DataSource dataSource1;
    @Autowired
    private DataSource dataSource2;
    @Bean
    public PlatformTransactionManager txManager1() {
        return new DataSourceTransactionManager(dataSource1);
    }
    @Bean
    public PlatformTransactionManager txManager2() {
        return new DataSourceTransactionManager(dataSource2);
    }
}

四、驗(yàn)證

我們把兩張表拆進(jìn)兩個(gè)庫中,以兩個(gè)庫模擬兩個(gè)數(shù)據(jù)源,使得程序可以同時(shí)連接兩個(gè)庫

瀏覽器輸入 http://127.0.0.1:8080/user/findall 查詢接口成功

再在瀏覽器輸入 http://127.0.0.1:8080/product/findall 查詢第二個(gè)庫的數(shù)據(jù)亦成功返回

這樣我們就完成了一個(gè)工程同時(shí)連接兩個(gè)數(shù)據(jù)源。

總結(jié)

經(jīng)過上述的操作,我們已經(jīng)成功把項(xiàng)目對接了多數(shù)據(jù)源。當(dāng)然,方案肯定不止這一種,后續(xù)圍繞該問題,我們還會講解其他方式。但不論是什么方式,主旨都是加深大家對SpringBoot 和 Mybatis的理解,我們曾經(jīng)梳理過全流程,但只是蜻蜓點(diǎn)水帶大家看一遍大體輪廓,并不足以讓你精通,后面本專欄將繼續(xù)深入講解,更多關(guān)于SpringBoot Mybatis對接多數(shù)據(jù)源的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot集成springdoc-openapi的案例講解(模擬前端請求)

    springboot集成springdoc-openapi的案例講解(模擬前端請求)

    文章介紹了Spring?Boot集成Swagger時(shí)版本沖突的常見問題,推薦使用springdoc-openapi-ui替代Springfox,因其配置更簡單且遵循OpenAPI規(guī)范,同時(shí)提供驗(yàn)證和界面優(yōu)化方法,對springboot集成springdoc-openapi相關(guān)知識感興趣的朋友一起看看吧
    2025-06-06
  • Java調(diào)用通義千問API的詳細(xì)步驟

    Java調(diào)用通義千問API的詳細(xì)步驟

    這篇文章主要介紹了在Java中接入通義千問API的步驟,包括獲取APIKey、添加依賴、配置模型和流式響應(yīng)等,并提供了響應(yīng)處理和高級功能實(shí)現(xiàn)示例,以及常見問題解決方案,需要的朋友可以參考下
    2026-03-03
  • Hibernatede 一對多映射配置方法(分享)

    Hibernatede 一對多映射配置方法(分享)

    下面小編就為大家?guī)硪黄狧ibernatede 一對多映射配置方法(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • mybatis-plus中更新null值的問題解決

    mybatis-plus中更新null值的問題解決

    本文主要介紹 mybatis-plus 中常使用的 update 相關(guān)方法的區(qū)別,以及更新 null 的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Java實(shí)現(xiàn)將Doc/Docx格式的Word文檔轉(zhuǎn)換為PDF文件

    Java實(shí)現(xiàn)將Doc/Docx格式的Word文檔轉(zhuǎn)換為PDF文件

    這篇文章主要為大家詳細(xì)介紹了如何通過Java將Word文檔轉(zhuǎn)換為PDF、PDF/A和密碼保護(hù)的PDF文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-08-08
  • 深入了解SparkSQL的運(yùn)用及方法

    深入了解SparkSQL的運(yùn)用及方法

    SparkSQL就是將SQL轉(zhuǎn)換成一個(gè)任務(wù),提交到集群上運(yùn)行,類似于Hive的執(zhí)行方式。本文給大家分享了SparkSQl的運(yùn)用及方法,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • Spring Boot搭配MinIO和KKFileView實(shí)現(xiàn)文件存儲和在線預(yù)覽

    Spring Boot搭配MinIO和KKFileView實(shí)現(xiàn)文件存儲和在線預(yù)覽

    在現(xiàn)代的Web應(yīng)用中,文件上傳和預(yù)覽是常見的需求場景,尤其是在內(nèi)容管理系統(tǒng)(CMS)或企業(yè)內(nèi)部應(yīng)用,本文介紹了如何使用SpringBoot、MinIO和KKFileView實(shí)現(xiàn)文件上傳和在線預(yù)覽功能,包括項(xiàng)目背景、技術(shù)選型、環(huán)境準(zhǔn)備、項(xiàng)目代碼實(shí)現(xiàn)和運(yùn)行測試等步驟
    2024-12-12
  • java 如何判斷是否可以ping通某個(gè)地址

    java 如何判斷是否可以ping通某個(gè)地址

    這篇文章主要介紹了java 如何判斷是否可以ping通某個(gè)地址,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 總結(jié)Java的Struts框架的異常處理方法

    總結(jié)Java的Struts框架的異常處理方法

    這篇文章主要介紹了Java的Struts框架的異常處理方法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例

    JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例

    這篇文章主要介紹了JFreeChart插件實(shí)現(xiàn)的折線圖效果,結(jié)合實(shí)例形式分析了基于JFreeChart繪制折線圖的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08

最新評論

仁布县| 廊坊市| 普洱| 阿勒泰市| 纳雍县| 临西县| 常山县| 高密市| 奉化市| 大同县| 通河县| 余江县| 高安市| 聊城市| 公安县| 宣威市| 宜宾市| 凤翔县| 隆子县| 龙陵县| 綦江县| 彭阳县| 葵青区| 卫辉市| 长兴县| 五台县| 玛沁县| 新化县| 来安县| 葵青区| 桐城市| 宜良县| 舟山市| 吉首市| 砚山县| 平舆县| 葵青区| 荥经县| 淳安县| 林周县| 视频|