亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置操作

 更新時(shí)間:2021年09月07日 11:28:15   作者:Java大表哥  
這篇文章主要介紹了使用springboot+druid雙數(shù)據(jù)源動(dòng)態(tài)配置的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

進(jìn)行動(dòng)態(tài)切換,需要在類(lèi)里面配置,順便解決mybatis-plus自帶代碼無(wú)法使用問(wèn)題,直接上代碼:

一、yml配置

數(shù)據(jù)源可以都是oracle的也可以一個(gè)是oracle一個(gè)是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/*"

二、動(dòng)態(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);
        //解決無(wú)法使用自帶方法問(wèn)題
        // TODO 使用 MybatisSqlSessionFactoryBean 而不是 SqlSessionFactoryBean
        MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
        factory.setDataSource(zjdbDataSource);
        //添加X(jué)ML目錄
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            factory.setMapperLocations(resolver.getResources("classpath:/yin/ketech/app/mapper/*/*.xml"));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        //解決無(wú)法使用分頁(yè)問(wèn)題
//        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);
        //添加X(jué)ML目錄
        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包最好是分開(kāi)

在掃描的時(shí)候會(huì)動(dòng)態(tài)注入,可能在上述代碼中會(huì)導(dǎo)致數(shù)據(jù)源自動(dòng)切換失?。?/p>

四、代碼中調(diào)用

總結(jié)

  • 1. 注意動(dòng)態(tài)配置的類(lèi)結(jié)合自己的包項(xiàng)目結(jié)構(gòu)修改
  • 2. 解決了mybatis-plus自帶語(yǔ)句不能使用問(wèn)題
  • 3. 解決無(wú)法使用分頁(yè)問(wèn)題
  • 4. 解決無(wú)法使用oracle自增主鍵問(wèn)題

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java8中如何通過(guò)方法引用獲取屬性名詳解

    Java8中如何通過(guò)方法引用獲取屬性名詳解

    這篇文章主要給大家介紹了關(guān)于Java8中如何通過(guò)方法引用獲取屬性名的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Spring Boot整合tk.mybatis代碼實(shí)例

    Spring Boot整合tk.mybatis代碼實(shí)例

    這篇文章主要介紹了Spring Boot整合tk.mybatis代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Spring中的@ModelAttribute模型屬性綁定詳解

    Spring中的@ModelAttribute模型屬性綁定詳解

    這篇文章主要介紹了Spring中的@ModelAttribute模型屬性綁定詳解,@ModelAttribute用于將方法參數(shù)或返回值綁定到Model屬性上,并公開(kāi)給Web視圖,支持使用@RequestMapping注釋的Controller類(lèi),需要的朋友可以參考下
    2024-02-02
  • QueryWrapper中查詢(xún)的坑及解決

    QueryWrapper中查詢(xún)的坑及解決

    這篇文章主要介紹了QueryWrapper中查詢(xún)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-01-01
  • java基于servlet使用組件smartUpload實(shí)現(xiàn)文件上傳

    java基于servlet使用組件smartUpload實(shí)現(xiàn)文件上傳

    這篇文章主要介紹了java基于servlet使用組件smartUpload實(shí)現(xiàn)文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 新手入門(mén)Jvm--Jvm垃圾回收

    新手入門(mén)Jvm--Jvm垃圾回收

    JVM是Java Virtual Machine(Java虛擬機(jī))的縮寫(xiě),JVM是一種用于計(jì)算設(shè)備的規(guī)范,它是一個(gè)虛構(gòu)出來(lái)的計(jì)算機(jī),是通過(guò)在實(shí)際的計(jì)算機(jī)上仿真模擬各種計(jì)算機(jī)功能來(lái)實(shí)現(xiàn)的
    2021-06-06
  • Java中4種經(jīng)典限流算法講解

    Java中4種經(jīng)典限流算法講解

    本文主要介紹了Java中4種經(jīng)典限流算法講解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java設(shè)計(jì)模式筆記之Builder模式

    Java設(shè)計(jì)模式筆記之Builder模式

    建造者模式是日常開(kāi)發(fā)中比較常見(jiàn)的設(shè)計(jì)模式,它的主要作用就是將復(fù)雜事物創(chuàng)建的過(guò)程抽象出來(lái),該抽象的不同實(shí)現(xiàn)方式不同,創(chuàng)建出的對(duì)象也不同,這篇文章主要給大家介紹了關(guān)于Java設(shè)計(jì)模式筆記之Builder模式的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • java獲取Date類(lèi)型的年份實(shí)例代碼

    java獲取Date類(lèi)型的年份實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于java如何獲取Date類(lèi)型的年份,針對(duì)java獲取Date時(shí)間的各種方式匯總,有常用的時(shí)間獲取方式,還有一些其他特殊時(shí)間獲取方式,需要的朋友可以參考下
    2024-06-06
  • EasyExcel自定義導(dǎo)出列和順序?qū)嵗a

    EasyExcel自定義導(dǎo)出列和順序?qū)嵗a

    這篇文章主要給大家介紹了關(guān)于EasyExcel自定義導(dǎo)出列和順序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論