Spring配置動態資料庫

来源:https://www.cnblogs.com/kiba/archive/2023/06/11/17473450.html
-Advertisement-
Play Games

前言 本文主要介紹使用spring boot 配置多個資料庫,即動態資料庫 開始搭建 首先創建一個SpringWeb項目——dynamicdb(spring-boot2.5.7) 然後引入相關依賴lombok、swagger2、mybatis-plus,如下: <?xml version="1.0" ...


前言

本文主要介紹使用spring boot 配置多個資料庫,即動態資料庫

開始搭建

首先創建一個SpringWeb項目——dynamicdb(spring-boot2.5.7)

然後引入相關依賴lombok、swagger2、mybatis-plus,如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>dynamicdb</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dynamicdb</name>
    <description>dynamicdb</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency><dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>
 
        <!-- mybatis-plus 依賴 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- sqlSessionTemplate 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- spring-boot dynamic 動態資料庫依賴-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
<!-- druid 動態簡易使用依賴 @DS("db1")-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>  
</dependencies><build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build></project>

然後在包dynamicdb下麵創建controller、mapper、dbmodel, 然後在resource下麵創建mapper文件夾及問題,如下圖:

然後配置application,啟用swagger2和添加mapper掃描,如下:

@EnableSwagger2
@Log4j2
@SpringBootApplication 
@MapperScan("com.example.dynamicdb.mapper")
public class DynamicdbApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(DynamicdbApplication.class, args);
    }
}

然後編輯resources下的application.yml,如下:

server:
  port: 8082
  servlet:
    context-path: /api
spring:
  servlet:
    multipart:
      max-file-size: 50MB
      max-request-size: 50MB
  datasource:
    dynamic: #使用動態資料庫配置
      primary: db1 # 配置預設資料庫
      datasource:
        db1: # 數據源1
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost/db1
          username: root
          password: 1qaz!QAZ
        db2: # 數據源2
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost/db2
          username: root
          password: 1qaz!QAZ
      druid:
        initial-size: 1
        max-active: 20
        min-idle: 1
        max-wait: 60000
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置 
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml #指定resources下的mapper文件夾下是存儲映射XML的文件夾

然後創建SqlSessionController,使用SqlSession來載入Mapper,代碼如下:

@RestController
public class SqlSessionController {
​
​
    @Autowired
    private SqlSession sqlSession;
​
    @GetMapping(value = "/SqlSession/normalSql")
    @ResponseBody
    @ApiOperation(value = "預設查詢,從主資料庫查詢", notes = "當前配置的主數據是db1-primary: db1")
    public List<user> normalSql() {
        //讀取第一個資料庫的值
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<user> users = mapper.test();
        return users;
    }
    @GetMapping(value = "/SqlSession/data_from_db1")
    @ResponseBody
    @DS("db1")
    @ApiOperation(value = "從db1資料庫查詢數據", notes = "查詢db1")
    public List<user> data_from_db1() {
        //讀取第一個資料庫的值
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<user> users = mapper.test();
        return users;
    }
​
    @GetMapping(value = "/SqlSession/data_from_db2")
    @ResponseBody
    @DS("db2")
    @ApiOperation(value = "從db2資料庫查詢數據", notes = "查詢db2")
    public List<user> data_from_db2(Integer id) {
        //讀取第二個資料庫的值
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<user> users = mapper.test();
        return users;
    }
}

代碼中使用 @DS("db1")來指定該介面內使用的資料庫。

再創建一個MapperController,測試使用Mapper直接訪問資料庫,如下

@RestController
public class MapperController {
​
    @Autowired
    private UserMapper userMapper;
​
    @GetMapping(value = "/Mapper/normalSql")
    @ResponseBody
    @ApiOperation(value = "使用Mapper查詢,從主資料庫查詢", notes = "當前配置的主數據是db1-primary: db1")
    public List<user> normalSql() {
        //讀取第一個資料庫的值
        List<user> users = userMapper.test();
        return users;
    }
}

----------------------------------------------------------------------------------------------------

到此,Spring配置動態資料庫就已經介紹完了。

代碼已經傳到Github上了,歡迎大家下載。

Github地址:https://github.com/kiba518/dynamicdb

----------------------------------------------------------------------------------------------------

註:此文章為原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/17473450.html

 

 

https://www.cnblogs.com/kiba/
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 單例模式是設計模式中最簡單、常見的一種。其主要目的是確保整個進程中,只有一個類的實例,並且提供一個統一的訪問介面。常用於 Logger 類、通信介面類等。 # 基本原理 限制用戶直接訪問類的構造函數,提供一個統一的 public 介面獲取單例對象。 這裡有一個“先有雞還是先有蛋”的問題: - 因為用 ...
  • 大家好,我是 god23bin,今天我們來介紹下設計模式中的一個重要的設計模式——策略模式。 當涉及到某個行為或演算法有多個變體時,策略模式是一種常見的設計模式。它允許在運行時選擇使用不同的策略,而無需修改現有代碼。 現在就使用設計模式中經常出現的鴨子模型來介紹吧! ...
  • 轉載請註明出處❤️ 作者:[測試蔡坨坨](https://www.caituotuo.top/) 原文鏈接:[caituotuo.top/400bd75c.html](https://www.caituotuo.top/400bd75c.html) 你好,我是測試蔡坨坨。 在日常測試工作中,我們經常 ...
  • 某日二師兄參加XXX科技公司的C++工程師開發崗位第11面: > 面試官:在C++中,你都知道都哪些運算符? > > 二師兄:啥?運算符?`+-*/=`這些算嗎? > > 面試官:嗯,還有其他的嗎? > > 二師兄:當然還有,`+=,-=,*=,/=,==`,還有邏輯運算,位運算等。 > > 面試官 ...
  • ## 什麼是GTH GTH 是Xilinx UltraScale系列FPGA上高速收發器的一種類型,本質上和其它名稱如GTP, GTX等只是器件類型不同、速率有差異;GTH 最低速率在500Mbps,最高在16Gbps ![](https://img2023.cnblogs.com/blog/274 ...
  • 博客推行版本更新,成果積累制度,已經寫過的博客還會再次更新,不斷地琢磨,高質量高數量都是要追求的,工匠精神是學習必不可少的精神。因此,大家有何建議歡迎在評論區踴躍發言,你們的支持是我最大的動力,你們敢投,我就敢肝 ...
  • List 介面是 Collection 介面的子介面。List 中元素有序,是按照元素的插入順序進行排序的。每個元素都有一個與之關聯的整數型索引(索引從 0 開始),可以根據索引來訪問和操作元素,可以使用普通 for 迴圈遍歷。List 中可以包含重覆的元素。 ...
  • # Go 實現 MySQL 資料庫事務 ## 一、MySQL事務 MySQL事務是指一組資料庫操作,它們被視為一個邏輯單元,並且要麼全部成功執行,要麼全部回滾(撤銷)。事務是資料庫管理系統提供的一種機制,用於確保數據的一致性和完整性。 事務具有以下特性(通常由ACID原則定義): 1. 原子性(At ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...