Springboot整合多數(shù)據(jù)源配置流程詳細講解
主要介紹兩種整合方式,分別是 springboot+mybatis 使用分包方式整合,和 springboot+druid+mybatisplus 使用注解方式整合。
多數(shù)據(jù)源整合
1. springboot+mybatis使用分包方式整合
1.1 主要依賴包
spring-boot-starter-web
mybatis-spring-boot-starter
mysql-connector-java
pom.xml jar包如下:
<!-- spring 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql 依賴 --><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# 啟動端口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
注意事項
各個版本的 springboot 配置 datasource 時參數(shù)有所變化,例如低版本配置數(shù)據(jù)庫 url 時使用 url 屬性,高版本使用 jdbc-url 屬性,請注意區(qū)分。
1.3 建立連接數(shù)據(jù)源的配置文件
第一個配置文件
@Configuration@MapperScan(basePackages = "com.qizhidao.demo.mapper.db1", sqlSessionFactoryRef = "db1SqlSessionFactory")publicclassDataSourceConfig1 {
@Primary// 表示這個數(shù)據(jù)源是默認數(shù)據(jù)源, 這個注解必須要加,因為不加的話spring將分不清楚那個為主數(shù)據(jù)源(默認數(shù)據(jù)源)@Bean("db1DataSource")@ConfigurationProperties(prefix = "spring.datasource.db1")//讀取application.yml中的配置參數(shù)映射成為一個對象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形式文件位置必須要配置,不然將報錯:no statement (這種錯誤也可能是mapper的xml中,namespace與項目的路徑不一致導致)
bean.setMapperLocations(newPathMatchingResourcePatternResolver().getResources("classpath*:mapping/db1/*.xml"));
return bean.getObject();
}
@Primary@Bean("db1SqlSessionTemplate")public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory){
returnnewSqlSessionTemplate(sqlSessionFactory);
}
}第二個配置文件
@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 具體實現(xiàn)
項目結(jié)構如下:
注意事項
- 在 service 層中根據(jù)不同的業(yè)務注入不同的 dao 層
- 如果是主從復制- -讀寫分離:比如 db1 中負責增刪改,db2 中負責查詢。但是需要注意的是負責增刪改的數(shù)據(jù)庫必須是主庫(master)
2. springboot+druid+mybatisplus使用注解整合
2.1 主要依賴包
spring-boot-starter-web
mybatis-plus-boot-starter
dynamic-datasource-spring-boot-starter # 配置動態(tài)數(shù)據(jù)源
druid-spring-boot-starter # 阿里的數(shù)據(jù)庫連接池
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# 配置默認數(shù)據(jù)庫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會注入一個DataSourceWrapper,其會在原生的spring.datasource下找 url, username, password 等。動態(tài)數(shù)據(jù)源 URL 等配置是在 dynamic 下,因此需要排除,否則會報錯。排除方式有兩種,一種是上述配置文件排除,還有一種可以在項目啟動類排除:
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)publicclassApplication {
publicstaticvoidmain(String[] args) {
SpringApplication.run(Application.class, args);
}
}2.3 給使用非默認數(shù)據(jù)源添加注解@DS
@DS 可以注解在方法上和類上,同時存在方法注解優(yōu)先于類上注解。
注解在 service 實現(xiàn)或 mapper 接口方法上,不要同時在 service 和 mapper 注解。
@DS("db2")publicinterfaceUserMapperextendsBaseMapper<User> {
}
@Service@DS("db2")publicclassModelServiceImplextendsServiceImpl<ModelMapper, Model> implementsIModelService {}
@Select("SELECT * FROM user")@DS("db2")
List<User> selectAll();到此這篇關于Springboot整合多數(shù)據(jù)源配置流程詳細講解的文章就介紹到這了,更多相關Springboot整合多數(shù)據(jù)源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- springboot配置druid多數(shù)據(jù)源的示例代碼
- Springboot整合JPA配置多數(shù)據(jù)源流程詳解
- SpringBoot使用druid配置多數(shù)據(jù)源問題
- SpringBoot配置多數(shù)據(jù)源的四種方式分享
- SpringBoot Redis配置多數(shù)據(jù)源的項目實踐
- SpringBoot多數(shù)據(jù)源配置方式以及報錯問題的解決
- springboot添加多數(shù)據(jù)源的方法實例教程
- 詳解SpringBoot Mybatis如何對接多數(shù)據(jù)源
- springboot配置多數(shù)據(jù)源(靜態(tài)和動態(tài)數(shù)據(jù)源)
相關文章
Java中調(diào)用Python的實現(xiàn)示例
本文主要介紹了Java中調(diào)用Python的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-05-05
在springboot中如何集成clickhouse進行讀寫操作
本文介紹了在Spring Boot中集成ClickHouse的步驟,包括引入依賴、配置數(shù)據(jù)源、編寫實體類和Mapper類進行CRUD操作,特別提到批量插入時需要在SQL語句中添加`FORMAT`以避免錯誤,在實際應用中,與MySQL的操作類似,只需將ClickHouse當作MySQL使用2024-11-11
JFINAL+Ajax傳參 array 數(shù)組方法 獲取request中數(shù)組操作
這篇文章主要介紹了JFINAL+Ajax傳參 array 數(shù)組方法 獲取request中數(shù)組操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
springboot統(tǒng)一返回json數(shù)據(jù)格式并配置系統(tǒng)異常攔截方式
這篇文章主要介紹了springboot統(tǒng)一返回json數(shù)據(jù)格式并配置系統(tǒng)異常攔截方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

