Springbootmybais配置多數(shù)據(jù)源過程解析

一、分包方式實現(xiàn):

創(chuàng)新互聯(lián)是專業(yè)的坊子網(wǎng)站建設(shè)公司,坊子接單;提供網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行坊子網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

1、在application.properties中配置兩個數(shù)據(jù)庫:

#druid連接池
#dataSoureOne(這里是我本地的數(shù)據(jù)源)
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.driver-class-name=com.MySQL.jdbc.Driver
spring.datasource.one.jdbc-url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.one.username=root
spring.datasource.one.password=root
#dataSoureTwo(這里是我們服務(wù)器的數(shù)據(jù)源)
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.two.jdbc-url=jdbc:mysql://xx.xxx.xx.xxx:3306/kds_master_info?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.two.username=root
spring.datasource.two.password=KDSmaster123

2、建立連個數(shù)據(jù)源的配置文件:

注意下面DataSource包引入的是import javax.activation.DataSource;

@Configuration// 配置mybatis的接口類放的地方
@MapperScan(basePackages = "com.example.mybatis.mapper",sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class DataSourceConfigOne {

  @Bean(name = "dataSourceOne")
  @Primary// 表示這個數(shù)據(jù)源是默認(rèn)數(shù)據(jù)源
  // 讀取application.properties中的配置參數(shù)映射成為一個對象,prefix表示參數(shù)的前綴
  @ConfigurationProperties(prefix = "spring.datasource.one")
  public DataSource dataSourceOne() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "sqlSessionFactoryOne")
  @Primary
  public SqlSessionFactory sqlSessionFactoryOne(@Qualifier("dataSourceOne") DataSource datasource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(datasource);
    bean.setMapperLocations(
        // 設(shè)置mybatis的xml所在位置
        new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));    bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);return bean.getObject();
  }

  @Primary
  public SqlSessionTemplate sqlsessiontemplateOne(@Qualifier("sqlsessiontemplateOne") SqlSessionFactory sessionfactory) {
    return new SqlSessionTemplate(sessionfactory);
  }
}
@Configuration
@MapperScan(basePackages = "com.example.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class DataSourceConfigTwo {
  @Bean(name = "dataSourceTwo")
  // 讀取application.properties中的配置參數(shù)映射成為一個對象,prefix表示參數(shù)的前綴
  @ConfigurationProperties(prefix = "spring.datasource.two")
  public DataSource dataSourceTwo() {
    return DataSourceBuilder.create().build();
  }

  @Bean(name = "sqlSessionFactoryTwo")
  public SqlSessionFactory sqlSessionFactoryTwo(@Qualifier("dataSourceTwo") DataSource datasource)throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource((javax.sql.DataSource) datasource);
    bean.setMapperLocations(
        // 設(shè)置mybatis的xml所在位置
        new PathMatchingResourcePatternResolver().getResources("classpath:mapper2/*.xml"));    bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
    return bean.getObject();
  }

  public SqlSessionTemplate sqlsessiontemplateTwo(@Qualifier("sqlsessiontemplateTwo") SqlSessionFactory sessionfactory) {
    return new SqlSessionTemplate(sessionfactory);
  }
}

注意:1、@Primary這個注解必須要加,因為不加的話spring將分不清楚那個為主數(shù)據(jù)源(默認(rèn)數(shù)據(jù)源)2、mapper的接口、xml形式以及dao層都需要兩個分開,目錄如圖:

Springboot mybais配置多數(shù)據(jù)源過程解析

3、bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“XXXX”));mapper的xml形式文件位置必須要配置,不然將報錯:no statement (這種錯誤也可能是mapper的xml中,namespace與項目的路徑不一致導(dǎo)致的)

4、在service層中根據(jù)不同的業(yè)務(wù)注入不同的dao層:

Springboot mybais配置多數(shù)據(jù)源過程解析

Springboot mybais配置多數(shù)據(jù)源過程解析

5.開始我啟動項目并訪問接口會報錯,查看了半小時才發(fā)現(xiàn),是下劃線與駝峰映射失敗,這個要在sqlSessionFactoryOne和sqlSessionFactoryTwo里面添加一行bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);才可以,然后繼續(xù)訪問,又報錯Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure.后來查詢得知,要在上面的數(shù)據(jù)庫連接url中將&useSSL=true改為&useSSL=false

最后測試一下,兩個數(shù)據(jù)庫userInfo和user表的數(shù)據(jù)都顯示出來了:

userInfo:

Springboot mybais配置多數(shù)據(jù)源過程解析

user:

Springboot mybais配置多數(shù)據(jù)源過程解析

最后還有一個錯誤忘了補充,在這里補充一下,我的springboot是2.x版本,在配置單個數(shù)據(jù)源時候,數(shù)據(jù)庫連接的url是spring.datasource.url=xxx,這樣沒有問題,但是在配置多數(shù)據(jù)源的時候spring.datasource.one.url和spring.datasource.two.url會報錯jdbcUrl is required with driverClassName.將spring.datasource.one.url和spring.datasource.two.url中的url改成spring.datasource.one.jdbc-url,也就是將url改成jdbc-url即可。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

當(dāng)前文章:Springbootmybais配置多數(shù)據(jù)源過程解析
地址分享:http://bm7419.com/article30/jdgiso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計公司外貿(mào)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站導(dǎo)航、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)