国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot多數(shù)據(jù)源配置詳解及報(bào)錯(cuò)問題解決

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot多數(shù)據(jù)源配置詳解及報(bào)錯(cuò)問題解決。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Spring Boot多數(shù)據(jù)源配置詳解
前幾天,公司提了個(gè)需求,對(duì)一個(gè)項(xiàng)目進(jìn)行二次開發(fā),在開發(fā)過程中,需要配置多數(shù)據(jù)源來進(jìn)行數(shù)據(jù)庫的操作。下面我將主鍵探索總結(jié)的配置流程和遇到的各種坑做以總結(jié),希望能夠幫到遇到同樣問題的友友。有錯(cuò)的地方,請(qǐng)各位大佬留言指出。
1.雙數(shù)據(jù)源配置
首先是數(shù)據(jù)源配置:application.yml文件,這里要注意的是單數(shù)據(jù)源下的數(shù)據(jù)庫路徑為url,多數(shù)據(jù)源下為jdbc-url

spring:
#單數(shù)據(jù)源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    jdbc-url: jdbc:mysql://127.0.0.1:3306/meeting?serverTimezone=UTC
    username: root
    password: 1111


# 多數(shù)據(jù)源
  datasource:
    one: #數(shù)據(jù)源1的配置
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/meeting?serverTimezone=UTC
      username: root
      password: 1111
    two:  #數(shù)據(jù)源2的配置
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://127.0.0.1:3306/xin-master?serverTimezone=UTC
      username: root
      password: 1111

注意點(diǎn):當(dāng)我們使用多數(shù)據(jù)源配置的時(shí)候,mybatis和plus的配置就不需要在.yml文件中配置了,下面就是關(guān)于數(shù)據(jù)源的一些其他config配置了。
2.當(dāng)數(shù)據(jù)源配置好之后,就需要注意我們的項(xiàng)目結(jié)構(gòu)了,由于是兩套數(shù)據(jù)源,所以對(duì)應(yīng)的mapper和xml文件應(yīng)當(dāng)放在不同的包或者目錄下
springboot配置多數(shù)據(jù)源無效,spring boot,mybatis
將每個(gè)數(shù)據(jù)源對(duì)應(yīng)的mapper接口,和*Mapper.xml文件分開放在不同的包下,保證在進(jìn)行數(shù)據(jù)庫的裝配時(shí),根據(jù)我們的不同包,對(duì)應(yīng)好不同的數(shù)據(jù)源。
3.對(duì)不同的數(shù)據(jù)源進(jìn)行不同的配置
數(shù)據(jù)源在配置時(shí)候要有主從之分,這里我的one數(shù)據(jù)源為主庫,他的配置如下,代碼過程請(qǐng)仔細(xì)看,主庫和從庫配置略有不同


> “主庫配置如下”


@Configuration
> 這里進(jìn)行mapper接口路徑的掃描
@MapperScan(basePackages = "com.sbp.api.mapper.mapper1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSourceOneConfig {

> 這里是一個(gè)不同點(diǎn),主庫要加"@Primary"注解
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().build();
    }
> 這里是一個(gè)不同點(diǎn),主庫要加"@Primary"注解
    @Bean
    @Primary
    @Lazy  //這個(gè)是懶加載的注解,根據(jù)自己項(xiàng)目需要看是否添加 
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //開啟駝峰
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        bean.setConfiguration(configuration);
        > "這個(gè)方法的調(diào)用是指定當(dāng)前數(shù)據(jù)源的mybatis的Xml文件的路徑"
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapping/mapper1/*.xml"));
        return bean.getObject();
    }

    @Bean
    @Primary
    public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean
    @Primary
    @Lazy
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

從庫配置如下


和主庫配置基本相同,只不過主庫的每個(gè)Bean前要加"@Primary"注解,從庫不加。

@Configuration
@MapperScan(basePackages = "com.sbp.api.mapper.mapper2", sqlSessionTemplateRef = "sqlSessionTemplate2")
public class DataSourceTwoConfig {
    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource.two")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //開啟駝峰
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        bean.setConfiguration(configuration);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapping/mapper2/*.xml"));
        return bean.getObject();
    }

    @Bean(name = "transactionManager2")
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate2")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

將上面的內(nèi)容配置好之后,基本就完成了雙數(shù)據(jù)源的配置,但是為了項(xiàng)目的健康運(yùn)行,還需要檢查下面的一些配置:
1.項(xiàng)目主啟動(dòng)類是否添加了@MapperScan(“*”)注解,如果添加了,請(qǐng)將他去掉,因?yàn)槲覀兊拿總€(gè)數(shù)據(jù)源在config配置類中都單獨(dú)指定了basePackages 掃描路徑。這里再添加上可能會(huì)報(bào)錯(cuò)。因?yàn)槲以贉y(cè)試過程中遇到了。

2.項(xiàng)目啟動(dòng)后主庫訪問可能沒有問題,但是從庫訪問報(bào):Invalid bound statement (not found):com…selectAll這種錯(cuò)誤

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.hnchances.api.mapper.mapper2.ymssm.YmSsmMapper.insterPhone

網(wǎng)上解決辦法我找著都試了一遍,好多大佬都有遇到這種問題,提供的問題解決思路如下
通常導(dǎo)致這種原因的大致有以下這幾種情況
1、mapper的namespace 有問題
2、 xxMapper的方法在xxMapper.xml中沒有,調(diào)用那個(gè)方法就報(bào)錯(cuò)
3、沒有正確配置ResultMap,或者只配置ResultType!等等。
當(dāng)篩選完畢上邊這些配置都沒有問題,那么就要考慮是不是mybatis或者mybatis-plus自動(dòng)加載了mapper,導(dǎo)致我們?cè)倥渲妙愔惺謩?dòng)配置的xml路徑失效,導(dǎo)致的 Invalid bound statement (not found)問題。
需要將二者的自動(dòng)加載排除:在主啟動(dòng)類中進(jìn)行排除即可:

> "這里@SpringBootApplication中的語句就是排除二者的自動(dòng)mapper加載,如果你的項(xiàng)目中只有其中一個(gè)依賴的話,就只需要排除一個(gè)就行,"
> "我的項(xiàng)目在之前開發(fā)時(shí),他們兩個(gè)mybatis持久層框架都使用了,所以兩個(gè)都需要排除"
@SpringBootApplication(exclude = {MybatisAutoConfiguration.class, MybatisPlusAutoConfiguration.class})
// 開啟定時(shí)任務(wù)
@EnableScheduling
//@MapperScan("com.hnchances.api.mapper")  //多數(shù)據(jù)源,這里不需要包掃描
@Import({DataSourceOneConfig.class, DataSourceTwoConfig.class})
public class ApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }
}

至此,spring boot多數(shù)據(jù)源配置和遇坑報(bào)錯(cuò)問題基本都解決了,如果友友們還遇到其他問題,并且找到了解決思路的話,歡迎留下文章鏈接供大家參考。文章來源地址http://www.zghlxwxcb.cn/news/detail-603463.html

到了這里,關(guān)于Spring Boot多數(shù)據(jù)源配置詳解及報(bào)錯(cuò)問題解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Boot整合Mybatis配置多數(shù)據(jù)源

    在之前的事件管理系統(tǒng)博客中有提到動(dòng)態(tài)的多數(shù)據(jù)源配置 工作中難免需要做幾個(gè)工具方便自己偷懶,加上之前的擋板,數(shù)據(jù)源肯定沒法單一配置,所以需要多數(shù)據(jù)源配置。這里介紹兩種配置:動(dòng)態(tài)數(shù)據(jù)源和固定數(shù)據(jù)源模式。這兩種我在目前的工作的工具開發(fā)中都有用到。 M

    2024年01月23日
    瀏覽(29)
  • 如何在Spring Boot中配置雙數(shù)據(jù)源?

    在許多應(yīng)用程序中, 可能會(huì)遇到需要連接多個(gè)數(shù)據(jù)庫的情況 。這些數(shù)據(jù)庫可以是不同的類型,例如關(guān)系型數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫,或者它們可以是相同類型但包含不同的數(shù)據(jù)。為了處理這種情況,我們可以使用雙數(shù)據(jù)源來管理多個(gè)數(shù)據(jù)庫連接。 雙數(shù)據(jù)源是指在一個(gè)應(yīng)用程序中

    2024年02月11日
    瀏覽(20)
  • spring boot下基于spring data jpa配置mysql+達(dá)夢(mèng)多數(shù)據(jù)源(以不同包路徑方式,mysql為主數(shù)據(jù)源)

    :mysql 達(dá)夢(mèng)/dameng jpa 多數(shù)據(jù)源 spring boot:2.1.17.RELEASE mysql驅(qū)動(dòng):8.0.21(跟隨boot版本) 達(dá)夢(mèng)驅(qū)動(dòng):8.1.2.192 lombok:1.18.12(跟隨boot版本) 以mysql為主數(shù)據(jù)源,達(dá)夢(mèng)為第二數(shù)據(jù)源方式配置 適用于舊項(xiàng)目二次開發(fā)接入達(dá)夢(mèng)數(shù)據(jù)庫或基于通用二方/三方包做業(yè)務(wù)擴(kuò)展等場(chǎng)景 將以不

    2024年02月05日
    瀏覽(58)
  • Spring Boot 2.7.5 HikariCP 連接池多數(shù)據(jù)源配置

    Spring Boot 2.7.5 HikariCP 連接池多數(shù)據(jù)源配置

    當(dāng)前項(xiàng)目遇到需要連接多個(gè)數(shù)據(jù)庫的場(chǎng)景,此時(shí)需要引入多數(shù)據(jù)源了. 還有一些諸如以下的場(chǎng)景: 與第三方對(duì)接時(shí),有些合作方并不會(huì)為了你的某些需求而給你開發(fā)一個(gè)功能,他們可以提供給你一個(gè)可以訪問數(shù)據(jù)源的只讀賬號(hào),你需要獲取什么數(shù)據(jù)由你自己進(jìn)行邏輯處理,這時(shí)

    2024年02月05日
    瀏覽(19)
  • Spring Boot+Atomikos進(jìn)行多數(shù)據(jù)源的分布式事務(wù)管理詳解和實(shí)例

    Spring Boot+Atomikos進(jìn)行多數(shù)據(jù)源的分布式事務(wù)管理詳解和實(shí)例

    背景: 一直零散的使用著Spring Boot 的各種組件和特性,從未系統(tǒng)性的學(xué)習(xí)和總結(jié),本次借著這個(gè)機(jī)會(huì)搞一波。共同學(xué)習(xí),一起進(jìn)步。哈哈 Atomikos是一個(gè)易用、可靠、開放源碼的事務(wù)管理器,它可以用于管理分布式事務(wù),尤其在微服務(wù)架構(gòu)中非常實(shí)用。它支持JTA(Java Transacti

    2024年02月11日
    瀏覽(23)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來說,學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年02月01日
    瀏覽(24)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JPA數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來說,學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月21日
    瀏覽(31)
  • 【Spring Boot】Spring Boot整合多數(shù)據(jù)源

    在實(shí)際的開發(fā)工作中,我們經(jīng)常會(huì)遇到需要整合多個(gè)數(shù)據(jù)源的情況,比如同時(shí)連接多個(gè)數(shù)據(jù)庫、讀寫分離、跨數(shù)據(jù)庫查詢等。本文將介紹如何使用Spring Boot來實(shí)現(xiàn)多數(shù)據(jù)源的整合,對(duì)于剛剛接觸開發(fā)的小伙伴可能有一些幫助。 在一個(gè)應(yīng)用程序中使用多個(gè)數(shù)據(jù)源意味著我們需要

    2024年02月10日
    瀏覽(27)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JPA多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來說,學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月22日
    瀏覽(30)
  • 【Spring Boot 3】【數(shù)據(jù)源】自定義JDBC多數(shù)據(jù)源

    軟件開發(fā)是一門實(shí)踐性科學(xué),對(duì)大多數(shù)人來說,學(xué)習(xí)一種新技術(shù)不是一開始就去深究其原理,而是先從做出一個(gè)可工作的DEMO入手。但在我個(gè)人學(xué)習(xí)和工作經(jīng)歷中,每次學(xué)習(xí)新技術(shù)總是要花費(fèi)或多或少的時(shí)間、檢索不止一篇資料才能得出一個(gè)可工作的DEMO,這占用了我大量的時(shí)

    2024年01月23日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包