欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot多數(shù)據(jù)源配置方式以及報(bào)錯(cuò)問題的解決

 更新時(shí)間:2023年08月01日 09:04:31   作者:qq_57794788  
這篇文章主要介紹了SpringBoot多數(shù)據(jù)源配置方式以及報(bào)錯(cuò)問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot多數(shù)據(jù)源配置

前幾天,公司提了個(gè)需求,對(duì)一個(gè)項(xiàng)目進(jìn)行二次開發(fā),在開發(fā)過程中,需要配置多數(shù)據(jù)源來(lái)進(jìn)行數(shù)據(jù)庫(kù)的操作。

下面我將主鍵探索總結(jié)的配置流程和遇到的各種坑做以總結(jié),希望能夠幫到遇到同樣問題的友友。

1.雙數(shù)據(jù)源配置

首先是數(shù)據(jù)源配置:application.yml文件,這里要注意的是單數(shù)據(jù)源下的數(shù)據(jù)庫(kù)路徑為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)放在不同的包或者目錄下

將每個(gè)數(shù)據(jù)源對(duì)應(yīng)的mapper接口,和*Mapper.xml文件分開放在不同的包下,保證在進(jìn)行數(shù)據(jù)庫(kù)的裝配時(shí),根據(jù)我們的不同包,對(duì)應(yīng)好不同的數(shù)據(jù)源。

3.對(duì)不同的數(shù)據(jù)源進(jìn)行不同的配置

數(shù)據(jù)源在配置時(shí)候要有主從之分,這里我的one數(shù)據(jù)源為主庫(kù),他的配置如下,

代碼過程請(qǐng)仔細(xì)看,主庫(kù)和從庫(kù)配置略有不同

> “主庫(kù)配置如下”

@Configuration
> 這里進(jìn)行mapper接口路徑的掃描
@MapperScan(basePackages = "com.sbp.api.mapper.mapper1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSourceOneConfig {
> 這里是一個(gè)不同點(diǎn),主庫(kù)要加"@Primary"注解
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().build();
    }
> 這里是一個(gè)不同點(diǎn),主庫(kù)要加"@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);
    }
}

從庫(kù)配置如下

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

@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)后主庫(kù)訪問可能沒有問題

但是從庫(kù)訪問報(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中的語(yǔ)句就是排除二者的自動(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ò)問題基本都解決了。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java el簡(jiǎn)介及用法

    java el簡(jiǎn)介及用法

    EL簡(jiǎn)介語(yǔ)法結(jié)構(gòu) 運(yùn)算符等資料代碼。
    2009-04-04
  • Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼

    Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼

    這篇文章主要介紹了Java中Maven項(xiàng)目導(dǎo)出jar包配置的示例代碼,需要的朋友可以參考下
    2018-11-11
  • 使用HttpClient調(diào)用接口的實(shí)例講解

    使用HttpClient調(diào)用接口的實(shí)例講解

    下面小編就為大家?guī)?lái)一篇使用HttpClient調(diào)用接口的實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-10-10
  • MyBatis?Plus如何實(shí)現(xiàn)獲取自動(dòng)生成主鍵值

    MyBatis?Plus如何實(shí)現(xiàn)獲取自動(dòng)生成主鍵值

    這篇文章主要介紹了MyBatis?Plus如何實(shí)現(xiàn)獲取自動(dòng)生成主鍵值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決

    Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決

    本文主要介紹了Springboot視頻接口報(bào)大量的ClientAbortException找不到原因的解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • Java Spring Boot實(shí)戰(zhàn)練習(xí)之單元測(cè)試篇

    Java Spring Boot實(shí)戰(zhàn)練習(xí)之單元測(cè)試篇

    單元測(cè)試(unit testing),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。對(duì)于單元測(cè)試中單元的含義,一般來(lái)說,要根據(jù)實(shí)際情況去判定其具體含義,如C語(yǔ)言中單元指一個(gè)函數(shù),Java里單元指一個(gè)類,圖形化的軟件中可以指一個(gè)窗口或一個(gè)菜單等
    2021-10-10
  • 阿里、華為、騰訊Java技術(shù)面試題精選

    阿里、華為、騰訊Java技術(shù)面試題精選

    這篇文章主要為大家分享了阿里、華為、騰訊Java技術(shù)面試題精選,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JpaRepository?實(shí)現(xiàn)簡(jiǎn)單條件查詢

    JpaRepository?實(shí)現(xiàn)簡(jiǎn)單條件查詢

    這篇文章主要介紹了JpaRepository?實(shí)現(xiàn)簡(jiǎn)單條件查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java繼承超詳細(xì)教程

    Java繼承超詳細(xì)教程

    繼承是面向?qū)ο笳Z(yǔ)法的三大特征之一,繼承可以降低代碼編寫的冗余度,提高編程的效率,通過繼承,子類獲得了父類的成員變量和方法,一個(gè)子類如何繼承父類的字段和方法,如何修改從父類繼承過來(lái)的子類的方法呢,今天我們開始學(xué)習(xí)有關(guān)Java繼承的知識(shí),感興趣的朋友一起看看吧
    2023-11-11
  • SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法

    SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法

    本文主要介紹了SpringBoot讀取properties配置文件中的數(shù)據(jù)的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06

最新評(píng)論