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

SpringBoot+Mybatis+Dynamic實現(xiàn)多數(shù)據(jù)源配置方式

 更新時間:2026年06月09日 09:14:41   作者:一恍過去  
這段文章詳細介紹了Dynamic?DataSource的配置與使用方法,重點在于在于動態(tài)數(shù)據(jù)源選擇邏輯和基本配置流程,通過引入dynamic-datasource開源庫,開發(fā)者可以輕松實現(xiàn)多數(shù)據(jù)源配置和動態(tài)切換功能,提高應(yīng)用程序的靈活性和擴展性

前言

多數(shù)據(jù)源是一種常見的技術(shù)需求,它允許應(yīng)用程序連接和操作多個不同的數(shù)據(jù)庫或數(shù)據(jù)源。

Dynamic多數(shù)據(jù)源配置允許根據(jù)運行時的條件動態(tài)選擇要使用的數(shù)據(jù)源?;九渲昧鞒虨椋?/p>

  • 創(chuàng)建數(shù)據(jù)源配置類:創(chuàng)建一個包含多個數(shù)據(jù)源配置的類,例如 DataSourceConfig。在該類中,定義多個數(shù)據(jù)源的連接信息和屬性,例如數(shù)據(jù)庫URL、用戶名、密碼等。
  • 創(chuàng)建數(shù)據(jù)源管理類:創(chuàng)建一個數(shù)據(jù)源管理類,該類負責(zé)動態(tài)選擇要使用的數(shù)據(jù)源,該類繼承AbstractRoutingDataSource類,并重寫determineCurrentLookupKey()方法來實現(xiàn)動態(tài)數(shù)據(jù)源選擇邏輯。
  • 實現(xiàn)數(shù)據(jù)源切換邏輯:根據(jù)應(yīng)用程序的需要,在運行時決定使用哪個數(shù)據(jù)源。

dynamic-datasource是一個開源的Java庫,用于實現(xiàn)動態(tài)多數(shù)據(jù)源配置和管理。它提供了在運行時動態(tài)選擇數(shù)據(jù)源的功能,可以根據(jù)業(yè)務(wù)需求或其他條件切換不同的數(shù)據(jù)源。

dynamic-datasource庫進行動態(tài)多數(shù)據(jù)源配置的基本步驟:

  • 引入依賴:在您的項目中,首先需要將dynamic-datasource庫添加到您的構(gòu)建工具(如Maven或Gradle)的依賴項中。
  • 配置數(shù)據(jù)源信息:在應(yīng)用程序的配置文件中,您需要定義多個數(shù)據(jù)源的連接信息。您可以為每個數(shù)據(jù)源指定唯一的名稱、數(shù)據(jù)庫URL、用戶名、密碼等配置項。
  • 配置動態(tài)數(shù)據(jù)源:在配置文件中,使用dynamic-datasource提供的配置方式,指定數(shù)據(jù)源的切換策略和數(shù)據(jù)源列表。您可以根據(jù)具體的條件或規(guī)則,動態(tài)選擇要使用的數(shù)據(jù)源。
  • 使用動態(tài)數(shù)據(jù)源:在需要訪問數(shù)據(jù)庫的代碼中,使用dynamic-datasource提供的API來獲取當前要使用的數(shù)據(jù)源。通過配置的切換策略,庫將自動選擇正確的數(shù)據(jù)源進行操作。

在引入Dynamic包后,通過使用@DS實現(xiàn)多數(shù)據(jù)源的使用,該注解可以用于方法上和類上;

1、創(chuàng)建數(shù)據(jù)庫(表)

分別在mysql中創(chuàng)建兩個庫:system、log,并且創(chuàng)建對應(yīng)的表(根據(jù)項目實際情況的定),如下:

2、POM

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

3、配置yaml

spring:
  application:
    name: quartz
  datasource:
    dynamic:
      #設(shè)置默認的數(shù)據(jù)源或者數(shù)據(jù)源組
      primary: system 
      strict: false
      datasource:
        system:
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3307/system?useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
          username: root
          password: lhzlx
        log:
          driverClassName: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3307/log?useUnicode=true&useSSL=false&zeroDateTimeBehavior=convertToNull&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
          username: root
          password: lhzlx
    # hikari連接池
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      #最大連接數(shù),小于等于0會被重置為默認值10;大于零小于1會被重置為minimum-idle的值
      maximum-pool-size: 10
      #最小空閑連接,默認值 10,小于0或大于maximum-pool-size,都會重置為maximum-pool-size
      minimum-idle: 2
      #連接超時時間:毫秒,小于250毫秒,否則被重置為默認值30秒
      connection-timeout: 60000
      #空閑連接超時時間,默認值600000ms(10分鐘),大于等于max-lifetime且max-lifetime>0,會被重置為0;
      #不等于0且小于10秒,會被重置為10秒。
      #只有空閑連接數(shù)大于最大連接數(shù)且空閑時間超過該值,才會被釋放(自動釋放過期鏈接)
      idle-timeout: 600000
      #連接最大存活時間.不等于0且小于30秒,會被重置為默認值30分鐘.設(shè)置應(yīng)該比mysql設(shè)置的超時時間短
      max-lifetime: 640000
      #連接測試查詢
      connection-test-query: SELECT 1
#mapper 別名掃描
mybatis:
  mapper-locations: classpath*:mappers/*.xml
  type-aliases-package: com.lhz.demo.model.entity
  #數(shù)據(jù)庫類型
  configuration.database-id: mysql
  #自動駝峰轉(zhuǎn)換
  configuration.map-underscore-to-camel-case: true

4、Mapper接口

com.lhz.demo.mapper目錄下創(chuàng)建LogMapperSysMapper,將@DS注解用在Mapper接口上表示為整個Mapper接口指定數(shù)據(jù)源;

LogMapper:

@Mapper
public interface LogMapper {
    List<TbLog> selectAll();
}

SysMapper:

@Mapper
@DS("log")
public interface SysMapper {
    List<TbSystem> selectAll();
}

5、Mappeing(XML)

resources/mappers目錄下創(chuàng)建LogMapper.xmlSystemMapper.xml文件

LogMapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhz.demo.mapper.LogMapper">
    <select id="selectAll" resultType="com.lhz.demo.model.entity.TbLog">
        select * from tb_log
    </select>
</mapper>

SystemMapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lhz.demo.mapper.SysMapper">
    <select id="selectAll" resultType="com.lhz.demo.model.entity.TbSystem">
        select * from tb_system
    </select>
</mapper>

6、Service

@DS注解用在調(diào)用Mapp接口的方法上,表示當前請求會訪問指定數(shù)據(jù)源;

@Service
public class TestService {

    @Resource
    private SysMapper sysMapper;

    @Resource
    private LogMapper logMapper;

    /**
     * 不指定數(shù)據(jù)源,模式使用system數(shù)據(jù)源
     * @return
     */
    public Object sys() {
        return sysMapper.selectAll();
    }


    /**
     * 指定數(shù)據(jù)源查詢
     * @return
     */
    @DS("log")
    public Object log() {
        return logMapper.selectAll();
    }
}

7、Controller

@RestController
@RequestMapping("/test")
@Slf4j
public class TestController {

    @Resource
    private TestService testService;

    /**
     * 查詢system庫
     * @return
     */
    @GetMapping("/sys")
    public Object sys() {
        return testService.sys();
    }


    /**
     * 查詢log庫
     * @return
     */
    @GetMapping("/log")
    public Object log() {
        return testService.log();
    }
}

8、測試

啟動項目分別訪問`http://localhost:9090/test/sys`與`http://localhost:9090/test/log`均有數(shù)據(jù)輸出,則表示配置成功;

總結(jié)

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

相關(guān)文章

  • Java中處理金額計算之使用Long還是BigDecimal詳解

    Java中處理金額計算之使用Long還是BigDecimal詳解

    在Java后端開發(fā)中處理與錢有關(guān)的業(yè)務(wù)時,確保金額計算的準確性和避免錯誤非常重要,這篇文章主要給大家介紹了關(guān)于Java中處理金額計算之使用Long還是BigDecimal的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • java實現(xiàn)驗證碼類生成中文驗證碼

    java實現(xiàn)驗證碼類生成中文驗證碼

    java實現(xiàn)的漢字輸入驗證碼,主要包含兩個類,一個是生成驗證碼,一個是判斷驗證碼輸入是否正確,實現(xiàn)原理非常簡單,將漢字和干擾線生成圖片并將漢字保存到session,前臺獲取每次生成驗證碼圖片并用文本框值和session值比較,功能就怎么簡單
    2014-01-01
  • java客戶端線上Apollo服務(wù)端的實現(xiàn)

    java客戶端線上Apollo服務(wù)端的實現(xiàn)

    這篇文章主要介紹了java客戶端線上Apollo服務(wù)端的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java中final關(guān)鍵字詳解及實例

    Java中final關(guān)鍵字詳解及實例

    這篇文章主要介紹了Java中final關(guān)鍵字詳解及實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 如何使用Idea搭建全注解式開發(fā)的SpringMVC項目

    如何使用Idea搭建全注解式開發(fā)的SpringMVC項目

    這篇文章主要介紹了如何使用Idea搭建全注解式開發(fā)的SpringMVC項目,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java工廠模式定義與用法實例分析

    Java工廠模式定義與用法實例分析

    這篇文章主要介紹了Java工廠模式定義與用法,結(jié)合具體實例形式分析了java工廠模式定義、使用相關(guān)操作技巧,并總結(jié)了類圖原理,需要的朋友可以參考下
    2019-07-07
  • hashMap擴容時應(yīng)該注意這些死循環(huán)問題

    hashMap擴容時應(yīng)該注意這些死循環(huán)問題

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著hashMap擴容時的死循環(huán)問題展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java實現(xiàn)的生成二維碼統(tǒng)計掃描次數(shù)并轉(zhuǎn)發(fā)到某個地址功能詳解

    Java實現(xiàn)的生成二維碼統(tǒng)計掃描次數(shù)并轉(zhuǎn)發(fā)到某個地址功能詳解

    這篇文章主要介紹了Java實現(xiàn)的生成二維碼統(tǒng)計掃描次數(shù)并轉(zhuǎn)發(fā)到某個地址功能,可實現(xiàn)生成帶統(tǒng)計功能的二維碼,涉及java二維碼的生成、參數(shù)傳遞、解析等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • Java實現(xiàn)的讀取資源文件工具類ResourcesUtil實例【可動態(tài)更改值的內(nèi)容】

    Java實現(xiàn)的讀取資源文件工具類ResourcesUtil實例【可動態(tài)更改值的內(nèi)容】

    這篇文章主要介紹了Java實現(xiàn)的讀取資源文件工具類ResourcesUtil,結(jié)合實例形式分析了java針對資源文件的讀取與修改相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • SpringBoot整合Mybatis-plus關(guān)鍵詞模糊查詢結(jié)果為空

    SpringBoot整合Mybatis-plus關(guān)鍵詞模糊查詢結(jié)果為空

    SpringBoot整合Mybatis-plus使用關(guān)鍵詞模糊查詢的時候,數(shù)據(jù)庫中有數(shù)據(jù),但是無法查找出來,本文就來介紹一下SpringBoot整合Mybatis-plus關(guān)鍵詞模糊查詢結(jié)果為空的解決方法
    2025-04-04

最新評論

上饶市| 柳江县| 宁都县| 玉门市| 安义县| 苗栗县| 屯留县| 府谷县| 平乡县| 济源市| 谢通门县| 凌海市| 饶平县| 高平市| 赤壁市| 沿河| 文成县| 汕尾市| 青铜峡市| 金阳县| 深州市| 宁化县| 涞水县| 浦东新区| 昭觉县| 隆安县| 东宁县| 金沙县| 榆中县| 清河县| 海南省| 大城县| 平定县| 泰兴市| 台湾省| 洪湖市| 开封市| 乾安县| 开江县| 鄂伦春自治旗| 赤水市|