最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring項(xiàng)目如何配置多數(shù)據(jù)源(已上生產(chǎn),親測(cè)有效)

 更新時(shí)間:2023年12月29日 09:21:15   作者:陳賝  
這篇文章主要介紹了spring項(xiàng)目如何配置多數(shù)據(jù)源(已上生產(chǎn),親測(cè)有效),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

方式一(推薦)

注解形式添加

引入依賴

      <!-- dynamic-datasource 多數(shù)據(jù)源-->
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
        <version>3.5.2</version>
      </dependency>

修改配置文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    dynamic:
      # 設(shè)置默認(rèn)的數(shù)據(jù)源或者數(shù)據(jù)源組,默認(rèn)值即為 master
      primary: master
      # 嚴(yán)格模式 匹配不到數(shù)據(jù)源則報(bào)錯(cuò)
      strict: true
      datasource:
        # 主庫(kù)數(shù)據(jù)源
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver
          username: root
          password: xxxxx
          url: jdbc:mysql://127.0.0.1:3306/ifssc-iot?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
        # 從庫(kù)庫(kù)數(shù)據(jù)源
        slave:
          driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
          url: jdbc:TAOS-RS://127.0.0.1:6041/power?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
          username: root
          password: xxxxx
        # 從庫(kù)庫(kù)數(shù)據(jù)源
        slave2:
          driver-class-name: com.taosdata.jdbc.rs.RestfulDriver
          url: jdbc:TAOS-RS://127.0.0.1:6041/power?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
          username: root
          password: xxxxx
      druid:
        enable: true
        max-active: 50
        min-idle: 50
        initial-size: 50
        max-wait: 60000
        time-between-eviction-runs-millis: 60000
        validation-query: select server_status()
        test-on-return: false
        test-while-idle: true
        test-on-borrow: false
        async-close-connection-enable: true
        async-init: true

使用 直接加在使用的方法上即可

  • @Slave
  • @DS(“slave2”)
  • @DS(“xxx”)
    @Slave
    public ResultVO test() {
        LambdaQueryWrapper<Temperature> lqw = new QueryWrapper<Temperature>().lambda()
                .eq(Temperature::getLocation, "杭州")
                .last("limit 10");
        List<Temperature> temperatureList = temperatureMapper.selectList(lqw);
        return ResultVO.success(temperatureList);
    }
    
    @Slave2
    public ResultVO test() {
        LambdaQueryWrapper<Temperature> lqw = new QueryWrapper<Temperature>().lambda()
                .eq(Temperature::getLocation, "杭州")
                .last("limit 10");
        List<Temperature> temperatureList = temperatureMapper.selectList(lqw);
        return ResultVO.success(temperatureList);
    }

方式二:分開(kāi)配置mapper,不影響之前的mapper

修改配置文件,添加數(shù)據(jù)源配置

修改application.yaml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      db1:
        enable: true
        driver-class-name: com.mysql.cj.jdbc.Driver
        max-active: 100
        min-idle: 100
        initial-size: 100
        max-wait: 60000
        time-between-eviction-runs-millis: 60000
        validation-query: SELECT 1 FROM DUAL
        jdbc-url: jdbc:mysql://***:3306/***2?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
        username: root
        password: ***
        test-on-return: false
        test-while-idle: true
        test-on-borrow: false
        async-close-connection-enable: true
        async-init: true
        use-unfair-lock: true
      db2:
        enable: true
        driver-class-name: com.mysql.cj.jdbc.Driver
        max-active: 100
        min-idle: 100
        initial-size: 100
        max-wait: 60000
        time-between-eviction-runs-millis: 60000
        validation-query: SELECT 1 FROM DUAL
        jdbc-url: jdbc:mysql://***:3306/***1?useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghai
        username: root
        password: ***
        test-on-return: false
        test-while-idle: true
        test-on-borrow: false
        async-close-connection-enable: true
        async-init: true
        use-unfair-lock: true
#mybatis
mybatis-plus:
  type-aliases-package: com.***.cloud.common.entity   # 所有Entity別名類所在包
  mapper-locations: classpath:mapper/**/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 配置打印日志
    call-setters-on-nulls: true
    cache-enabled: false   

添加配置類

主數(shù)據(jù)源配置

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.logging.stdout.StdOutImpl;
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.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.annotation.Scope;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * 主數(shù)據(jù)源配置
 *
 * @author 陳琛
 * @date 2022/05/09
 */
@Configuration
@MapperScan(basePackages = {"com.xxx.cloud.platform.mapper"}, sqlSessionFactoryRef = "sqlSessionFactory")
public class PrimaryDataSourceConfig {

    @Resource
    private MybatisPlusInterceptor mybatisPlusInterceptor;

    @Value("${mybatis-plus.mapper-locations}")
    private String locationPattern;

    @Value("${mybatis-plus.type-aliases-package}")
    private String typeAliasesPackage;

    @Bean
    @Scope(value = "prototype")
    @ConfigurationProperties(prefix = "mybatis-plus.configuration")
    public MybatisConfiguration getCfg() {
        return new MybatisConfiguration();
    }


    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource.druid.db1")
    @Primary
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setPlugins(mybatisPlusInterceptor);
        bean.setConfiguration(getCfg());
        bean.setTypeAliasesPackage(typeAliasesPackage);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(locationPattern));
        return bean.getObject();
    }

    @Bean(name = "transactionManager")
    @Primary
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate")
    @Primary
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

次數(shù)據(jù)源配置

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.logging.stdout.StdOutImpl;
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.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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.jdbc.datasource.DataSourceTransactionManager;

import javax.annotation.Resource;
import javax.sql.DataSource;

/**
 * 第二個(gè)數(shù)據(jù)源配置
 *
 * @author 陳琛
 * @date 2022/05/09
 */
@Configuration
@MapperScan(basePackages = {"com.xxx.cloud.platform.websiteMapper"}, sqlSessionFactoryRef = "sqlSessionFactory2")
public class SecondDataSourceConfig {

    @Resource
    private MybatisPlusInterceptor mybatisPlusInterceptor;

    @Value("${mybatis-plus.mapper-locations}")
    private String locationPattern;

    @Value("${mybatis-plus.type-aliases-package}")
    private String typeAliasesPackage;

    @Resource
    private MybatisConfiguration mybatisConfiguration;

    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource.druid.db2")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setPlugins(mybatisPlusInterceptor);
        bean.setConfiguration(mybatisConfiguration);
        bean.setTypeAliasesPackage(typeAliasesPackage);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(locationPattern));
        return bean.getObject();
    }

    @Bean(name = "transactionManager2")
    public DataSourceTransactionManager transactionManager(@Qualifier("dataSource2") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "sqlSessionTemplate2")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

數(shù)據(jù)源分配

  • 主數(shù)據(jù)源正常使用之前的mapper
  • 次數(shù)據(jù)源使用之后新建的websiteMapper

總結(jié)

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

相關(guān)文章

  • SpringBoot的前后端聯(lián)調(diào):表單提交、AJAX登錄與狀態(tài)管理、以及JSON數(shù)據(jù)交互

    SpringBoot的前后端聯(lián)調(diào):表單提交、AJAX登錄與狀態(tài)管理、以及JSON數(shù)據(jù)交互

    本文通過(guò)三個(gè)Web案例(表單提交、AJax異步交互與狀態(tài)管理、JSON數(shù)據(jù)傳輸與REST式接口)演示SpringBoot的前后端聯(lián)調(diào),每個(gè)案例詳述了后端注解與前端代碼,解析了聯(lián)調(diào)重點(diǎn),通過(guò)這些案例,讀者能能學(xué)到如何在實(shí)際項(xiàng)目中實(shí)現(xiàn)前后端有效溝通
    2026-04-04
  • Java Spire.PDF實(shí)現(xiàn)PDF表單數(shù)據(jù)自動(dòng)導(dǎo)入與導(dǎo)出

    Java Spire.PDF實(shí)現(xiàn)PDF表單數(shù)據(jù)自動(dòng)導(dǎo)入與導(dǎo)出

    對(duì)于Java開(kāi)發(fā)者而言,處理PDF表單數(shù)據(jù)往往伴隨著諸多挑戰(zhàn),本文將借助 Spire.PDF for Java 這一強(qiáng)大工具,清晰地展示如何實(shí)現(xiàn)PDF表單數(shù)據(jù)的導(dǎo)入與導(dǎo)出,感興趣的小伙伴可以了解下
    2026-02-02
  • Java反射技術(shù)詳解

    Java反射技術(shù)詳解

    這篇文章主要結(jié)合實(shí)例形式分析了介紹了Java反射技術(shù),小編覺(jué)得這篇文章寫的還不錯(cuò),需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • Java高效地分割文本文件的方法技巧

    Java高效地分割文本文件的方法技巧

    這篇文章介紹了Java中零拷貝技術(shù)的原理和應(yīng)用,通過(guò)比較傳統(tǒng)方法和零拷貝方法的性能,展示了如何使用FileChannel的transferTo方法高效地分割大型文本文件,特別是在保持行完整性的同時(shí),顯著提高了處理速度,需要的朋友可以參考下
    2025-05-05
  • 基于Properties類操作.properties配置文件方法總結(jié)

    基于Properties類操作.properties配置文件方法總結(jié)

    這篇文章主要介紹了Properties類操作.properties配置文件方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Jsoup解析html實(shí)現(xiàn)招聘信息查詢功能

    Jsoup解析html實(shí)現(xiàn)招聘信息查詢功能

    這篇文章主要為大家詳細(xì)介紹了Jsoup解析html實(shí)現(xiàn)招聘信息查詢功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • SpringBoot2.3定制錯(cuò)誤頁(yè)面的方法示例

    SpringBoot2.3定制錯(cuò)誤頁(yè)面的方法示例

    這篇文章主要介紹了SpringBoot2.3定制錯(cuò)誤頁(yè)面的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • IDEA實(shí)現(xiàn)自定義背景圖方式

    IDEA實(shí)現(xiàn)自定義背景圖方式

    本文詳細(xì)介紹了在Idea中修改背景圖的步驟,包括點(diǎn)擊File、設(shè)置、外觀和行為、外觀、下拉找到背景圖片、獲取文件地址、調(diào)節(jié)透明度和選擇覆蓋整個(gè)編輯器
    2026-03-03
  • 快速解決Hash碰撞沖突的方法小結(jié)

    快速解決Hash碰撞沖突的方法小結(jié)

    這篇文章主要介紹了快速解決Hash碰撞沖突的方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 從一道面試題看你對(duì)java的理解程度

    從一道面試題看你對(duì)java的理解程度

    這篇文章主要給大家介紹了關(guān)于如何從一道面試題看你對(duì)java的理解程度的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧
    2018-09-09

最新評(píng)論

监利县| 蛟河市| 舞阳县| 永胜县| 建始县| 江川县| 洪洞县| 襄樊市| 贵德县| 元谋县| 托里县| 乌审旗| 蚌埠市| 金堂县| 青海省| 滨海县| 乌兰察布市| 扎赉特旗| 微山县| 邢台市| 玉环县| 霍山县| 江阴市| 南陵县| 密山市| 佛坪县| 迭部县| 得荣县| 理塘县| 东阳市| 深水埗区| 衡山县| 张家川| 米脂县| 中江县| 伊宁县| 自贡市| 高台县| 柳州市| 五常市| 汕头市|