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

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

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

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

前幾天,公司提了個需求,對一個項目進行二次開發(fā),在開發(fā)過程中,需要配置多數(shù)據(jù)源來進行數(shù)據(jù)庫的操作。

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

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

注意點:當我們使用多數(shù)據(jù)源配置的時候,mybatis和plus的配置就不需要在.yml文件中配置了,下面就是關(guān)于數(shù)據(jù)源的一些其他config配置了。

2.當數(shù)據(jù)源配置好之后

就需要注意我們的項目結(jié)構(gòu)了,由于是兩套數(shù)據(jù)源,所以對應的mapper和xml文件應當放在不同的包或者目錄下

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

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

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

代碼過程請仔細看,主庫和從庫配置略有不同

> “主庫配置如下”

@Configuration
> 這里進行mapper接口路徑的掃描
@MapperScan(basePackages = "com.sbp.api.mapper.mapper1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class DataSourceOneConfig {
> 這里是一個不同點,主庫要加"@Primary"注解
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource db1DataSource() {
        return DataSourceBuilder.create().build();
    }
> 這里是一個不同點,主庫要加"@Primary"注解
    @Bean
    @Primary
    @Lazy  //這個是懶加載的注解,根據(jù)自己項目需要看是否添加 
    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);
        > "這個方法的調(diào)用是指定當前數(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);
    }
}

從庫配置如下

和主庫配置基本相同,只不過主庫的每個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ù)源的配置,但是為了項目的健康運行,

還需要檢查下面的一些配置:

1.項目主啟動類是否添加了@MapperScan(“*”)注解

如果添加了,請將他去掉,因為我們的每個數(shù)據(jù)源在config配置類中都單獨指定了basePackages 掃描路徑。這里再添加上可能會報錯。因為我再測試過程中遇到了。

2.項目啟動后主庫訪問可能沒有問題

但是從庫訪問報:Invalid bound statement (not found):com…selectAll這種錯誤

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

網(wǎng)上解決辦法我找著都試了一遍,好多大佬都有遇到這種問題,提供的問題解決思路如下

通常導致這種原因的大致有以下這幾種情況

1、mapper的namespace 有問題

2、 xxMapper的方法在xxMapper.xml中沒有,調(diào)用那個方法就報錯

3、沒有正確配置ResultMap,或者只配置ResultType!等等。

當篩選完畢上邊這些配置都沒有問題,那么就要考慮是不是mybatis或者mybatis-plus自動加載了mapper,導致我們再配置類中手動配置的xml路徑失效,導致的 Invalid bound statement (not found)問題。

需要將二者的自動加載排除:在主啟動類中進行排除即可:

> "這里@SpringBootApplication中的語句就是排除二者的自動mapper加載,如果你的項目中只有其中一個依賴的話,就只需要排除一個就行,"
> "我的項目在之前開發(fā)時,他們兩個mybatis持久層框架都使用了,所以兩個都需要排除"
@SpringBootApplication(exclude = {MybatisAutoConfiguration.class, MybatisPlusAutoConfiguration.class})
// 開啟定時任務
@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ù)源配置和遇坑報錯問題基本都解決了。

總結(jié)

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

相關(guān)文章

  • java文件操作工具類分享(file文件工具類)

    java文件操作工具類分享(file文件工具類)

    java文件操作工具類(文件工具類)
    2014-01-01
  • Java多線程環(huán)境下死鎖模擬

    Java多線程環(huán)境下死鎖模擬

    這篇文章主要介紹了模擬Java多線程環(huán)境下的死鎖,文章介紹一些死鎖的產(chǎn)生條件的相關(guān)資料,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2021-12-12
  • SpringBoot 如何從配置文件讀取值到對象中

    SpringBoot 如何從配置文件讀取值到對象中

    這篇文章主要介紹了SpringBoot 如何從配置文件讀取值到對象中,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot整合Shiro實現(xiàn)登錄與權(quán)限校驗詳細解讀

    Springboot整合Shiro實現(xiàn)登錄與權(quán)限校驗詳細解讀

    本文給大家介紹Springboot整合Shiro的基本使用,Apache?Shiro是Java的一個安全框架,Shiro本身無法知道所持有令牌的用戶是否合法,我們將整合Shiro實現(xiàn)登錄與權(quán)限的驗證
    2022-04-04
  • Spring攔截器實現(xiàn)鑒權(quán)的示例代碼

    Spring攔截器實現(xiàn)鑒權(quán)的示例代碼

    本文主要介紹了Spring攔截器實現(xiàn)鑒權(quán)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • SpringMVC項目訪問controller時候報404的解決

    SpringMVC項目訪問controller時候報404的解決

    這篇文章主要介紹了SpringMVC項目訪問controller時候報404的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot配置全局異常處理器捕獲異常詳解

    SpringBoot配置全局異常處理器捕獲異常詳解

    spring-boot統(tǒng)一異常捕獲,異常時相對于return的一種退出機制,可以由系統(tǒng)觸發(fā),下面這篇文章主要給大家介紹了關(guān)于SpringBoot配置全局異常處理器捕獲異常的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • SpringBoot實現(xiàn)Md5對數(shù)據(jù)庫數(shù)據(jù)加密的示例

    SpringBoot實現(xiàn)Md5對數(shù)據(jù)庫數(shù)據(jù)加密的示例

    本文主要介紹了SpringBoot實現(xiàn)Md5對數(shù)據(jù)庫數(shù)據(jù)加密的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • JAVA發(fā)送HTTP請求的四種方式總結(jié)

    JAVA發(fā)送HTTP請求的四種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于JAVA發(fā)送HTTP請求的多種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • java多線程編程之為什么要進行數(shù)據(jù)同步

    java多線程編程之為什么要進行數(shù)據(jù)同步

    數(shù)據(jù)同步就是指在同一時間,只能由一個線程來訪問被同步的類變量,當前線程訪問完這些變量后,其他線程才能繼續(xù)訪問,下面看一下為什么要進行數(shù)據(jù)同步
    2014-01-01

最新評論

鄂托克前旗| 渭源县| 屏边| 盐源县| 安溪县| 额尔古纳市| 安仁县| 乐东| 宜良县| 隆林| 泰兴市| 天水市| 宁武县| 通化市| 南乐县| 枣阳市| 丹棱县| 台中市| 花莲县| 建宁县| 商丘市| 织金县| 清河县| 噶尔县| 海阳市| 呼伦贝尔市| 隆昌县| 荥经县| 海门市| 汉沽区| 黄石市| 青海省| 萨嘎县| 凤台县| 临潭县| 彰化县| 沾益县| 金秀| 靖边县| 木兰县| 九龙坡区|