亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Springboot整合多數(shù)據(jù)源配置流程詳細(xì)講解

 更新時(shí)間:2023年03月27日 10:12:15   作者:瘋狂-小子  
這篇文章主要介紹了Springboot整合多數(shù)據(jù)源配置流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧

主要介紹兩種整合方式,分別是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。

多數(shù)據(jù)源整合

1. springboot+mybatis使用分包方式整合

1.1 主要依賴(lài)包

spring-boot-starter-web
mybatis-spring-boot-starter
mysql-connector-java

pom.xml jar包如下:

<!-- spring 依賴(lài) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql 依賴(lài) --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>

1.2 application.yml 配置文件

server:port:8080# 啟動(dòng)端口spring:datasource:db1:# 數(shù)據(jù)源1jdbc-url:jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driverdb2:# 數(shù)據(jù)源2jdbc-url:jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driver

注意事項(xiàng)

各個(gè)版本的 springboot 配置 datasource 時(shí)參數(shù)有所變化,例如低版本配置數(shù)據(jù)庫(kù) url 時(shí)使用 url 屬性,高版本使用 jdbc-url 屬性,請(qǐng)注意區(qū)分。

1.3 建立連接數(shù)據(jù)源的配置文件

第一個(gè)配置文件

@Configuration@MapperScan(basePackages = "com.qizhidao.demo.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")publicclassDataSourceConfig1 {
    @Primary// 表示這個(gè)數(shù)據(jù)源是默認(rèn)數(shù)據(jù)源, 這個(gè)注解必須要加,因?yàn)椴患拥脑?huà)spring將分不清楚那個(gè)為主數(shù)據(jù)源(默認(rèn)數(shù)據(jù)源)@Bean("db1DataSource")@ConfigurationProperties(prefix = "spring.datasource.db1")//讀取application.yml中的配置參數(shù)映射成為一個(gè)對(duì)象public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }
    @Primary@Bean("db1SqlSessionFactory")public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource)throws Exception {
        SqlSessionFactoryBeanbean=newSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        // mapper的xml形式文件位置必須要配置,不然將報(bào)錯(cuò):no statement (這種錯(cuò)誤也可能是mapper的xml中,namespace與項(xiàng)目的路徑不一致導(dǎo)致)
        bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath*:mapping/db1/*.xml"));
        return bean.getObject();
    }
    @Primary@Bean("db1SqlSessionTemplate")public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        returnnewSqlSessionTemplate(sqlSessionFactory);
    }
}

第二個(gè)配置文件

@Configuration@MapperScan(basePackages = "com.example.demon.mapper.db2", sqlSessionFactoryRef = "db2SqlSessionFactory")publicclassDataSourceConfig2{
    @Bean("db2DataSource")@ConfigurationProperties(prefix = "spring.datasource.db2")public DataSource getDb1DataSource(){
        return DataSourceBuilder.create().build();
    }
    @Bean("db2SqlSessionFactory")public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db2DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/db2/*.xml"));
        return bean.getObject();
    }
    @Bean("db2SqlSessionTemplate")public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db2SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

1.4 具體實(shí)現(xiàn)

項(xiàng)目結(jié)構(gòu)如下:

注意事項(xiàng)

  • 在 service 層中根據(jù)不同的業(yè)務(wù)注入不同的 dao 層
  • 如果是主從復(fù)制- -讀寫(xiě)分離:比如 db1 中負(fù)責(zé)增刪改,db2 中負(fù)責(zé)查詢(xún)。但是需要注意的是負(fù)責(zé)增刪改的數(shù)據(jù)庫(kù)必須是主庫(kù)(master)

2. springboot+druid+mybatisplus使用注解整合

2.1 主要依賴(lài)包

spring-boot-starter-web

mybatis-plus-boot-starter

dynamic-datasource-spring-boot-starter # 配置動(dòng)態(tài)數(shù)據(jù)源

druid-spring-boot-starter # 阿里的數(shù)據(jù)庫(kù)連接池

mysql-connector-java

pom.xml 引入jar如下:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>2.5.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.20</version></dependency>

2.2 application.yml 配置文件

server:port:8080spring:datasource:dynamic:primary:db1# 配置默認(rèn)數(shù)據(jù)庫(kù)datasource:db1:# 數(shù)據(jù)源1配置url:jdbc:mysql://localhost:3306/db1?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driverdb2:# 數(shù)據(jù)源2配置url:jdbc:mysql://localhost:3306/db2?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8username:rootpassword:rootdriver-class-name:com.mysql.cj.jdbc.Driverdurid:initial-size:1max-active:20min-idle:1max-wait:60000autoconfigure:exclude:com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure# 去除druid配置

DruidDataSourceAutoConfigure會(huì)注入一個(gè)DataSourceWrapper,其會(huì)在原生的spring.datasource下找 url, username, password 等。動(dòng)態(tài)數(shù)據(jù)源 URL 等配置是在 dynamic 下,因此需要排除,否則會(huì)報(bào)錯(cuò)。排除方式有兩種,一種是上述配置文件排除,還有一種可以在項(xiàng)目啟動(dòng)類(lèi)排除:

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)publicclassApplication {
  publicstaticvoidmain(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

2.3 給使用非默認(rèn)數(shù)據(jù)源添加注解@DS

@DS 可以注解在方法上和類(lèi)上,同時(shí)存在方法注解優(yōu)先于類(lèi)上注解。

注解在 service 實(shí)現(xiàn)或 mapper 接口方法上,不要同時(shí)在 service 和 mapper 注解。

@DS("db2")publicinterfaceUserMapperextendsBaseMapper<User> {
}
@Service@DS("db2")publicclassModelServiceImplextendsServiceImpl<ModelMapper, Model> implementsIModelService {}
  @Select("SELECT * FROM user")@DS("db2")
  List<User> selectAll();

到此這篇關(guān)于Springboot整合多數(shù)據(jù)源配置流程詳細(xì)講解的文章就介紹到這了,更多相關(guān)Springboot整合多數(shù)據(jù)源內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA使用Ldap操作AD域的方法示例

    JAVA使用Ldap操作AD域的方法示例

    這篇文章主要介紹了JAVA使用Ldap操作AD域的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Java手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制

    Java手動(dòng)實(shí)現(xiàn)Redis的LRU緩存機(jī)制

    在Java中LRU的實(shí)現(xiàn)方式是使用HashMap結(jié)合雙向鏈表,HashMap的值是雙向鏈表的節(jié)點(diǎn),雙向鏈表的節(jié)點(diǎn)也保存一份key value。
    2021-05-05
  • Mybatis和orcale update語(yǔ)句中接收參數(shù)為對(duì)象的實(shí)例代碼

    Mybatis和orcale update語(yǔ)句中接收參數(shù)為對(duì)象的實(shí)例代碼

    Mybatis的 mapper.xml 中 update 語(yǔ)句使用 if 標(biāo)簽判斷對(duì)像屬性是否為空值。本文重點(diǎn)給大家介紹Mybatis和orcale update語(yǔ)句中接收參數(shù)為對(duì)象的實(shí)例代碼,需要的朋友參考下吧
    2017-09-09
  • Java實(shí)現(xiàn)HTTPS連接的示例代碼

    Java實(shí)現(xiàn)HTTPS連接的示例代碼

    現(xiàn)在的網(wǎng)絡(luò)世界,安全性是大家都非常關(guān)注的問(wèn)題,特別是對(duì)于咱們這些程序員來(lái)說(shuō),所以,理解并實(shí)現(xiàn)HTTPS連接,對(duì)于保護(hù)咱們的數(shù)據(jù)安全是極其重要的,下面我們就來(lái)學(xué)習(xí)一下在Java中如何實(shí)現(xiàn)HTTPS連接吧
    2023-12-12
  • Springboot使用異步請(qǐng)求提高系統(tǒng)的吞吐量詳解

    Springboot使用異步請(qǐng)求提高系統(tǒng)的吞吐量詳解

    這篇文章主要介紹了Springboot使用異步請(qǐng)求提高系統(tǒng)的吞吐量詳解,和同步請(qǐng)求相對(duì),異步不需要等待響應(yīng),隨時(shí)可以發(fā)送下一次請(qǐng)求,如果是同步請(qǐng)求,需要將信息填寫(xiě)完整,再發(fā)送請(qǐng)求,服務(wù)器響應(yīng)填寫(xiě)是否正確,再做修改,需要的朋友可以參考下
    2023-08-08
  • JVM指令的使用深入詳解

    JVM指令的使用深入詳解

    這篇文章主要給大家介紹了關(guān)于JVM指令使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Java實(shí)現(xiàn)Executors類(lèi)創(chuàng)建常見(jiàn)線(xiàn)程池

    Java實(shí)現(xiàn)Executors類(lèi)創(chuàng)建常見(jiàn)線(xiàn)程池

    本文主要介紹了Java實(shí)現(xiàn)Executors類(lèi)創(chuàng)建常見(jiàn)線(xiàn)程池,在Java中,可以通過(guò)Executors工廠類(lèi)提供四種常見(jiàn)類(lèi)型的線(xiàn)程池,下面就來(lái)介紹一下這四種的方法實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11
  • 注入jar包里的對(duì)象,用@autowired的實(shí)例

    注入jar包里的對(duì)象,用@autowired的實(shí)例

    這篇文章主要介紹了注入jar包里的對(duì)象,用@autowired的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot 工程中的異常處理方式

    SpringBoot 工程中的異常處理方式

    這篇文章主要介紹了SpringBoot 工程中的異常處理方式,幫助大家更好的理解和學(xué)習(xí)使用springboot框架,感興趣的朋友可以了解下
    2021-02-02
  • java實(shí)現(xiàn)即賦值也判斷的寫(xiě)法示例

    java實(shí)現(xiàn)即賦值也判斷的寫(xiě)法示例

    這篇文章主要為大家介紹了java實(shí)現(xiàn)即賦值也判斷的寫(xiě)法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論