一、分包方式實(shí)現(xiàn):
創(chuàng)新互聯(lián)是專業(yè)的坊子網(wǎng)站建設(shè)公司,坊子接單;提供網(wǎng)站建設(shè)、做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行坊子網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
1、在application.properties中配置兩個(gè)數(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、建立連個(gè)數(shù)據(jù)源的配置文件:
注意下面DataSource包引入的是import javax.activation.DataSource;
@Configuration// 配置mybatis的接口類放的地方 @MapperScan(basePackages = "com.example.mybatis.mapper",sqlSessionFactoryRef = "sqlSessionFactoryOne") public class DataSourceConfigOne { @Bean(name = "dataSourceOne") @Primary// 表示這個(gè)數(shù)據(jù)源是默認(rèn)數(shù)據(jù)源 // 讀取application.properties中的配置參數(shù)映射成為一個(gè)對象,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ù)映射成為一個(gè)對象,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這個(gè)注解必須要加,因?yàn)椴患拥脑抯pring將分不清楚那個(gè)為主數(shù)據(jù)源(默認(rèn)數(shù)據(jù)源)2、mapper的接口、xml形式以及dao層都需要兩個(gè)分開,目錄如圖:
3、bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(“XXXX”));mapper的xml形式文件位置必須要配置,不然將報(bào)錯:no statement (這種錯誤也可能是mapper的xml中,namespace與項(xiàng)目的路徑不一致導(dǎo)致的)
4、在service層中根據(jù)不同的業(yè)務(wù)注入不同的dao層:
5.開始我啟動項(xiàng)目并訪問接口會報(bào)錯,查看了半小時(shí)才發(fā)現(xiàn),是下劃線與駝峰映射失敗,這個(gè)要在sqlSessionFactoryOne和sqlSessionFactoryTwo里面添加一行bean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);才可以,然后繼續(xù)訪問,又報(bào)錯Failed to obtain JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure.后來查詢得知,要在上面的數(shù)據(jù)庫連接url中將&useSSL=true改為&useSSL=false
最后測試一下,兩個(gè)數(shù)據(jù)庫userInfo和user表的數(shù)據(jù)都顯示出來了:
userInfo:
user:
最后還有一個(gè)錯誤忘了補(bǔ)充,在這里補(bǔ)充一下,我的springboot是2.x版本,在配置單個(gè)數(shù)據(jù)源時(shí)候,數(shù)據(jù)庫連接的url是spring.datasource.url=xxx,這樣沒有問題,但是在配置多數(shù)據(jù)源的時(shí)候spring.datasource.one.url和spring.datasource.two.url會報(bào)錯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://www.rwnh.cn/article30/jdgiso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、外貿(mào)網(wǎng)站建設(shè)、云服務(wù)器、網(wǎng)站導(dǎo)航、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)