SpringBoot Mybatis如何配置多數(shù)據(jù)源并分包
看了不少網(wǎng)上關(guān)于多數(shù)據(jù)源的配置,大致可分為兩類(lèi),分包方式和通過(guò)切面方式;
樣例已上傳至github:https://github.com/dadachao/multids
第一個(gè)子項(xiàng)目ds01即時(shí)使用分包方式完成多數(shù)據(jù)源配置。
總結(jié)項(xiàng)目中出現(xiàn)的問(wèn)題和解決辦法:
數(shù)據(jù)庫(kù)的連接信息:
連接信息是寫(xiě)在db.properties文件中的:
#數(shù)據(jù)庫(kù)ds1
spring.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC
spring.datasource.ds1.username=root
spring.datasource.ds1.password=root
#數(shù)據(jù)庫(kù)ds2
spring.datasource.ds2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.ds2.url=jdbc:mysql://localhost:3306/ds2?serverTimezone=UTC
spring.datasource.ds2.username=root
spring.datasource.ds2.password=root
這些信息將在配置類(lèi)DbConfig1.java中引用。一開(kāi)始我是通過(guò)使用注解@ImportResource(...)引進(jìn)db.properties文件,但在運(yùn)行時(shí)報(bào)了org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允許有內(nèi)容的錯(cuò)誤;使用這個(gè)注解也是我瞎猜的。后是通過(guò)使用注解@PropertySource(value = "classpath:/db.properties",encoding = "utf-8")解決問(wèn)題。
其次是關(guān)于在配置類(lèi)中使用@ConfigurationProperties注解自動(dòng)注入連接信息值(value)的問(wèn)題:spring.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1?serverTimezone=UTC
注意要使用.url而不是.jdbc-url;
指定數(shù)據(jù)連接池類(lèi)型DataType:
數(shù)據(jù)源類(lèi)型可以在配置類(lèi)生成DataSource的方法中指定:
@Bean(name = "ds1DataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.ds1")
public DataSource getDataSource(){
DataSourceBuilder<?> dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.type(com.alibaba.druid.pool.DruidDataSource.class);
return dataSourceBuilder.build();
}
指定***Mapper.xml文件的路徑掃描問(wèn)題:(相當(dāng)重要)
使用配置類(lèi)進(jìn)行數(shù)據(jù)源相關(guān)進(jìn)行配置后,原先在application.yml中配置的相關(guān)參數(shù)就不起作用了(原因未知),原先我是在application.yml中配置了.xml文件的掃描路徑:
mybatis:
mapper-locations: classpath:/mybatis/**/*.xml
type-aliases-package: com.kong.ds01.model
但在運(yùn)行時(shí)報(bào)錯(cuò):Mapper Bound Error(not found);后來(lái)通過(guò)在配置類(lèi)中寫(xiě)入掃描路徑解決:
public final static String mapperXmlLocation = "classpath:mybatis/*/*.xml";
@Bean(name = "ds1SqlSessionFactory")
@Primary
public SqlSessionFactory getSqlSessionFactory(@Qualifier("ds1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperXmlLocation));
return sqlSessionFactoryBean.getObject();
}
而且通過(guò)這種方法表示任意路徑不能使用/**/,要使用/*/,否則識(shí)別不出來(lái)又會(huì)報(bào)相同的錯(cuò)誤,這點(diǎn)真是太坑了!
指定執(zhí)行器的類(lèi)型(Execute.Type):
可以通過(guò)在配置類(lèi)中的sqlSessionTemplate中指定:
@Bean(name = "ds1SqlSessionTemplate")
@Primary
public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("ds1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH);
}
指定為BATCH類(lèi)型后在進(jìn)行批量操作時(shí)效率有明顯的提高。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java連接MySQL數(shù)據(jù)庫(kù)并實(shí)現(xiàn)數(shù)據(jù)交互功能
在現(xiàn)代應(yīng)用中,數(shù)據(jù)庫(kù)是不可或缺的一部分,Java 作為一種廣泛使用的編程語(yǔ)言,提供了豐富的 API 來(lái)與各種數(shù)據(jù)庫(kù)進(jìn)行交互,本文將詳細(xì)介紹如何在 Java 中連接 MySQL 數(shù)據(jù)庫(kù),并實(shí)現(xiàn)基本的數(shù)據(jù)交互功能,需要的朋友可以參考下2024-10-10
SpringBoot項(xiàng)目中Maven剔除無(wú)用Jar引用的最佳實(shí)踐
在?Spring?Boot?項(xiàng)目開(kāi)發(fā)中,Maven?是最常用的構(gòu)建工具之一,通過(guò)?Maven,我們可以輕松地管理項(xiàng)目所需的依賴(lài),而,隨著項(xiàng)目的復(fù)雜化,無(wú)用的?Jar?包引用可能會(huì)逐漸增多,本文旨在詳細(xì)解析如何在?Spring?Boot?項(xiàng)目中剔除無(wú)用的?Jar?引用,需要的朋友可以參考下2025-01-01
使用Spring RestTemplate 詳解實(shí)踐使用及拓展增強(qiáng)
這篇文章主要介紹了使用Spring RestTemplate 詳解實(shí)踐使用及拓展增強(qiáng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
IDEA編譯報(bào)錯(cuò):Error:java:無(wú)效的源發(fā)行版:17的解決辦法
IDEA里面裝了幾個(gè)版本的JDK,導(dǎo)入工程后時(shí)不時(shí)提示一下錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于IDEA編譯報(bào)錯(cuò):Error:java:無(wú)效的源發(fā)行版:17的解決辦法,需要的朋友可以參考下2023-01-01
java swing中實(shí)現(xiàn)拖拽功能示例
這篇文章主要介紹了java swing中實(shí)現(xiàn)拖拽功能示例,需要的朋友可以參考下2014-04-04
SpringMVC實(shí)現(xiàn)文件上傳下載的全過(guò)程
對(duì)于上傳功能,我們?cè)陧?xiàng)目中是經(jīng)常會(huì)用到的,比如用戶(hù)注冊(cè)的時(shí)候,上傳用戶(hù)頭像,這個(gè)時(shí)候就會(huì)使用到上傳的功能,而對(duì)于下載使用場(chǎng)景也很常見(jiàn),下面這篇文章主要給大家介紹了關(guān)于SpringMVC實(shí)現(xiàn)文件上傳下載的相關(guān)資料,需要的朋友可以參考下2022-01-01
Jackson庫(kù)進(jìn)行JSON?序列化時(shí)遇到了無(wú)限遞歸(Infinite?Recursion)的問(wèn)題及解決方案
使用Jackson庫(kù)進(jìn)行JSON序列化時(shí)遇到了無(wú)限遞歸(Infinite?Recursion)問(wèn)題,這是因?yàn)閮蓚€(gè)實(shí)體類(lèi)ComPointQuotaEntity和?ComPointEntity之間存在雙向關(guān)聯(lián)point和pointQuota相互引用,本文給大家介紹解決方案,感興趣的朋友一起看看吧2025-03-03
MybatisPlus將自定義的sql列表查詢(xún)返回改為分頁(yè)查詢(xún)
本文主要介紹了MybatisPlus將自定義的sql列表查詢(xún)返回改為分頁(yè)查詢(xún),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04
MyBatis基礎(chǔ)支持DataSource實(shí)現(xiàn)源碼解析
這篇文章主要為大家介紹了MyBatis基礎(chǔ)支持DataSource實(shí)現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

