使用springboot+druid雙數(shù)據(jù)源動態(tài)配置操作
更新時間:2021年09月07日 11:28:15 作者:Java大表哥
這篇文章主要介紹了使用springboot+druid雙數(shù)據(jù)源動態(tài)配置的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
進(jìn)行動態(tài)切換,需要在類里面配置,順便解決mybatis-plus自帶代碼無法使用問題,直接上代碼:
一、yml配置
數(shù)據(jù)源可以都是oracle的也可以一個是oracle一個是mysql的。
spring: datasource: druid: db-type: com.alibaba.druid.pool.DruidDataSource #多數(shù)據(jù)源1: zjdb: driverClassName: oracle.jdbc.driver.OracleDriver url: jdbc:oracle:thin:@XX.XX.XX.XX:1521/ORCL username: XXXXXXX password: XXX # \u521D\u59CB\u5316\u8FDE\u63A5\u5927\u5C0F initial-size: 5 # \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570 min-idle: 5 max-active: 20 max-wait: 30000 # \u53EF\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\u95F4\u9694\u65F6\u95F4 time-between-eviction-runs-millis: 60000 # \u914D\u7F6E\u8FDE\u63A5\u5728\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4 min-evictable-idle-time-millis: 300000 validation-query: select '1' from dual test-while-idle: true test-on-borrow: false test-on-return: false # \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F pool-prepared-statements: true max-open-prepared-statements: 20 max-pool-prepared-statement-per-connection-size: 20 # \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters filters: stat #多數(shù)據(jù)源2: zjfz: driverClassName: oracle.jdbc.driver.OracleDriver url: jdbc:oracle:thin:@XX.XX.XX.XX:51521/ORCL username: XXXXX password: XXXX # driverClassName: com.mysql.jdbc.Driver # url: jdbc:mysql://127.0.0.1:3306/ketech-dev?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true # username: root # password: 123456 # \u521D\u59CB\u5316\u8FDE\u63A5\u5927\u5C0F initial-size: 5 # \u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5\u6570 min-idle: 5 max-active: 20 max-wait: 30000 # \u53EF\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\u95F4\u9694\u65F6\u95F4 time-between-eviction-runs-millis: 60000 # \u914D\u7F6E\u8FDE\u63A5\u5728\u6C60\u4E2D\u7684\u6700\u5C0F\u751F\u5B58\u65F6\u95F4 min-evictable-idle-time-millis: 300000 validation-query: select '1' from dual test-while-idle: true test-on-borrow: false test-on-return: false # \u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F pool-prepared-statements: true max-open-prepared-statements: 20 max-pool-prepared-statement-per-connection-size: 20 # \u914D\u7F6E\u76D1\u63A7\u7EDF\u8BA1\u62E6\u622A\u7684filters filters: stat stat-view-servlet: url-pattern: /druid/* reset-enable: false login-username: admin login-password: 123456 web-stat-filter: url-pattern: /* exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
二、動態(tài)切換數(shù)據(jù)源配置文件
1.數(shù)據(jù)源db1
package yin.ketech.app.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import javax.sql.DataSource; /** * @FileName: ZjDbConfig * @Author Yep * @create 2020-06-17 * @Description: 多數(shù)據(jù)源-1 */ @Configuration @MapperScan(basePackages = "yin.ketech.app.mapper", sqlSessionFactoryRef = "zjdbSqlSessionFactory") public class ZjDbConfig { @Primary @Bean(name = "zjdbDataSource") @Qualifier("zjdbDataSource") @ConfigurationProperties(prefix = "spring.datasource.zjdb") public DataSource zjdbDataSource() { return DruidDataSourceBuilder.create().build(); } @Primary @Bean(name = "zjdbSqlSessionFactory") @Qualifier("zjdbSqlSessionFactory") public SqlSessionFactory zjdbSqlSessionFactory(@Qualifier("zjdbDataSource") DataSource zjdbDataSource) throws Exception { // SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); // factoryBean.setDataSource(zjdbDataSource); //解決無法使用自帶方法問題 // TODO 使用 MybatisSqlSessionFactoryBean 而不是 SqlSessionFactoryBean MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean(); factory.setDataSource(zjdbDataSource); //添加XML目錄 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { factory.setMapperLocations(resolver.getResources("classpath:/yin/ketech/app/mapper/*/*.xml")); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } //解決無法使用分頁問題 // factory.setPlugins(new Interceptor[]{new MybatisPlusConfig().paginationInterceptor()}); //設(shè)置Oracle主鍵自增 factory.setGlobalConfig(new MybatisPlusConfig().globalConfig()); return factory.getObject(); } @Primary @Bean(name = "zjdbSqlSessionTemplate") public SqlSessionTemplate zjdbSqlSessionTemplate(@Qualifier("zjdbSqlSessionFactory") SqlSessionFactory zjdbSqlSessionFactory) throws Exception { // 使用上面配置的Factory SqlSessionTemplate template = new SqlSessionTemplate(zjdbSqlSessionFactory); return template; } }
2.數(shù)據(jù)源db2
package yin.ketech.app.config; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import javax.sql.DataSource; /** * @FileName: ZjFzConfig * @Author Yep * @create 2020-06-17 * @Description: 多數(shù)據(jù)源-2 */ @Configuration @MapperScan(basePackages = "yin.ketech.app.zjfzmapper", sqlSessionFactoryRef = "zjfzSqlSessionFactory") public class ZjFzConfig { @Bean(name = "zjfzDataSource") @Qualifier("zjfzDataSource") @ConfigurationProperties(prefix = "spring.datasource.zjfz") public DataSource zjfzDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "zjfzSqlSessionFactory") @Qualifier("zjfzSqlSessionFactory") public SqlSessionFactory zjfzSqlSessionFactory(@Qualifier("zjfzDataSource") DataSource zjfzDataSource) throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(zjfzDataSource); //添加XML目錄 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { factoryBean.setMapperLocations(resolver.getResources("classpath:/yin/ketech/app/mapper/zjfz/mapper/*.xml")); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return factoryBean.getObject(); } @Bean(name = "zjfzSqlSessionTemplate") public SqlSessionTemplate zjfzSqlSessionTemplate(@Qualifier("zjfzSqlSessionFactory") SqlSessionFactory zjfzSqlSessionFactory) throws Exception { // 使用上面配置的Factory SqlSessionTemplate template = new SqlSessionTemplate(zjfzSqlSessionFactory); return template; } }
三、多數(shù)據(jù)源的mapper包最好是分開
在掃描的時候會動態(tài)注入,可能在上述代碼中會導(dǎo)致數(shù)據(jù)源自動切換失?。?/p>
四、代碼中調(diào)用
總結(jié)
- 1. 注意動態(tài)配置的類結(jié)合自己的包項目結(jié)構(gòu)修改
- 2. 解決了mybatis-plus自帶語句不能使用問題
- 3. 解決無法使用分頁問題
- 4. 解決無法使用oracle自增主鍵問題
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- SpringBoot集成Druid實現(xiàn)多數(shù)據(jù)源的兩種方式
- SpringBoot整合Mybatis-Plus+Druid實現(xiàn)多數(shù)據(jù)源配置功能
- springboot mybatis druid配置多數(shù)據(jù)源教程
- 關(guān)于springboot配置druid數(shù)據(jù)源不生效問題(踩坑記)
- springboot配置多數(shù)據(jù)源并集成Druid和mybatis的操作
- SpringBoot環(huán)境Druid數(shù)據(jù)源使用及特點
- Springboot mybatis plus druid多數(shù)據(jù)源解決方案 dynamic-datasource的使用詳解
- SpringBoot整合Druid數(shù)據(jù)源過程詳解
- 通過springboot+mybatis+druid配置動態(tài)數(shù)據(jù)源
- springboot 動態(tài)數(shù)據(jù)源的實現(xiàn)方法(Mybatis+Druid)
- Spring Boot+Mybatis+Druid+PageHelper實現(xiàn)多數(shù)據(jù)源并分頁的方法
- 詳解Spring Boot整合Mybatis實現(xiàn) Druid多數(shù)據(jù)源配置
- spring使用xml方式整合Druid數(shù)據(jù)源連接池
相關(guān)文章
Spring中的@ModelAttribute模型屬性綁定詳解
這篇文章主要介紹了Spring中的@ModelAttribute模型屬性綁定詳解,@ModelAttribute用于將方法參數(shù)或返回值綁定到Model屬性上,并公開給Web視圖,支持使用@RequestMapping注釋的Controller類,需要的朋友可以參考下2024-02-02java基于servlet使用組件smartUpload實現(xiàn)文件上傳
這篇文章主要介紹了java基于servlet使用組件smartUpload實現(xiàn)文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10EasyExcel自定義導(dǎo)出列和順序?qū)嵗a
這篇文章主要給大家介紹了關(guān)于EasyExcel自定義導(dǎo)出列和順序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07