Heim > Java > javaLernprogramm > So verwenden Sie Dynamic Datasource zum Konfigurieren mehrerer Datenquellen in SpringBoot

So verwenden Sie Dynamic Datasource zum Konfigurieren mehrerer Datenquellen in SpringBoot

PHPz
Freigeben: 2023-05-16 19:07:23
nach vorne
2684 Leute haben es durchsucht

Funktionsmerkmale:

  1. Unterstützt die Gruppierung von Datenquellen, geeignet für eine Vielzahl von Szenarien, reines Lesen und Schreiben mehrerer Datenbanken Trennung, ein Master und mehrere aus dem Mischmodus.

  2. Unterstützt den Start ohne Datenquelle und unterstützt die Konfiguration der Lazy-Startup-Datenquelle (3.3.2+).

  3. Unterstützt die Verschlüsselung sensibler Datenbank-Konfigurationsinformationen ENC().

  4. Unterstützt die unabhängige Initialisierung des Tabellenstrukturschemas und der Datenbankdatenbank für jede Datenbank.

  5. unterstützt benutzerdefinierte Anmerkungen und muss DS (3.2.0+) erben.

  6. Bietet schnelle Integration für Druid, Mybatis-Plus, P6sy, Jndi.

  7. Vereinfachen Sie die Konfiguration von Druid und HikariCp und stellen Sie eine globale Parameterkonfiguration bereit. Einmal konfigurieren und global nutzen.

  8. Bietet maßgeschneiderte Datenquellenlösungen.

  9. bietet eine Lösung zum dynamischen Hinzufügen und Entfernen von Datenquellen nach Projektstart.

  10. Bietet eine reine Lese-/Schreib-Trennlösung in der Mybatis-Umgebung.

  11. Stellt eine Methode zum Parsen des Datenquellenschemas unter Verwendung dynamischer SpEL-Parameter bereit. Integriertes Spiel, Sitzung, Header, Support-Anpassung.

  12. Unterstützt die verschachtelte Umschaltung mehrschichtiger Datenquellen. (ServiceA >>> ServiceB >>> ServiceC).

  13. Bietet Lösungen, Vorsichtsmaßnahmen und Beispiele für die Integration von Bibliotheken von Drittanbietern wie Shiro, Sharding-JDBC, Quartz usw.

  14. Bietet eine verteilte Transaktionslösung basierend auf Seata. Anhang: Native Spring-Transaktionen werden nicht unterstützt.

  15. Bietet lokale Transaktionslösungen mit mehreren Datenquellen. Anhang: Native Spring-Transaktionen (3.3.1+) werden nicht unterstützt.

Unser Artikel implementiert hauptsächlich die Trennung von Lesen und Schreiben sowie eine Umgebung mit einem Master und mehreren Slaves.

  • Es wird empfohlen, dass die Hauptdatenbank nur INSERT-, UPDATE- und DELETE-Vorgänge ausführt.

  • Es wird empfohlen, nur SELECT-Operationen aus der Datenbank auszuführen.

1. Bereiten Sie die Datenbank vor

Hauptdatenbank: PiaoDB

# 🎜 🎜#

SpringBoot中如何使用Dynamic Datasource配置多数据源

Aus Datenbank 1: PiaoDB2 🎜#

SpringBoot中如何使用Dynamic Datasource配置多数据源 2. Importieren Sie die POM-Datei

#🎜 🎜#

Führen Sie den Dynamic-Datasource-Spring-Boot-Starter ein.

<!-- 多数据源 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
Nach dem Login kopieren

SpringBoot中如何使用Dynamic Datasource配置多数据源3. Bearbeiten Sie die Konfigurationsdatei

Wir haben eine Master-Bibliothek und zwei Slave-Bibliotheken konfiguriert.

Der „Header“ aller durch Unterstrich _ getrennten Datenquellen in der Konfigurationsdatei ist der Name der Gruppe Datenquellen mit demselben Gruppennamen werden in einer Gruppe weiter unten platziert.

Der Standardname der Datenquelle ist „Master“, den wir über spring.datasource.dynamic.primary ändern können.

  • spring:
      datasource:
        dynamic:
          primary: master #设置默认的数据源或者数据源组,默认值即为master
          strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
          datasource:
            master:
              url: jdbc:mysql://localhost:3306/PiaoDB?serverTimezone=Asia/Shanghai
              username: root
              password: root
              driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
            slave_1:
              url: jdbc:mysql://localhost:3306/PiaoDB2?serverTimezone=Asia/Shanghai
              username: root
              password: root
              driver-class-name: com.mysql.jdbc.Driver
            slave_2:
              url: jdbc:mysql://localhost:3306/PiaoDB3?serverTimezone=Asia/Shanghai
              username: root
              password: root
              driver-class-name: com.mysql.jdbc.Driver
    Nach dem Login kopieren

    Da wir den Alibaba-Datenbankverbindungspool Druid verwenden, müssen wir die Schnellkonfigurationsklasse des nativen Druid ausschließen.

  • Andere Integrationsadressen von Drittanbietern: Integrated Druid
  • @SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
    public class Application {
    
      public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
      }
    }
    Nach dem Login kopieren

    Einige SpringBoot-Versionen sind möglicherweise nicht ausgeschlossen und können auf folgende Weise ausgeschlossen werden.

    spring:
      autoconfigure:
        exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
    Nach dem Login kopieren
  • Zusätzlich zur Konfiguration eines Masters und mehrerer Slaves können wir ihn auch konfigurieren.
# 多主多从                      纯粹多库(记得设置primary)                   混合配置
spring:                               spring:                               spring:
  datasource:                           datasource:                           datasource:
    dynamic:                              dynamic:                              dynamic:
      datasource:                           datasource:                           datasource:
        master_1:                             mysql:                                master:
        master_2:                             oracle:                               slave_1:
        slave_1:                              sqlserver:                            slave_2:
        slave_2:                              postgresql:                           oracle_1:
        slave_3:                              h3:                                   oracle_2:
Nach dem Login kopieren

4. Code schreiben

Verwenden Sie @DS, um die Datenquelle zu wechseln. @DS kann für Methoden und Klassen mit Anmerkungen versehen werden. Wenn beide vorhanden sind, haben Methodenanmerkungen Vorrang vor Klassenanmerkungen. Es wird dringend empfohlen, die Service-Implementierung oder die Mapper-Schnittstellenmethode mit Anmerkungen zu versehen.

@DS("xxx") gibt die Datenquelle xxx an, wobei xxx ein Gruppenname oder der Name einer bestimmten Bibliothek sein kann. Wenn es sich um einen Gruppennamen handelt, wird beim Umschalten der Lastausgleichsalgorithmus verwendet. Wenn der angegebene Gruppenname oder die angegebene Bibliothek nicht vorhanden ist, wird automatisch die Standarddatenquelle (Hauptbibliothek) verwendet.

Wenn kein @DS vorhanden ist, wird die Standarddatenquelle ( Hauptbibliothek) wird verwendet

  • Wenn @DS gesetzt ist, aber keine Gruppe oder Bibliothek angegeben ist, wird eine Slave-Bibliothek basierend auf der DynamicDataSourceStrategy-Strategie ausgewählt. Standardrichtlinie für den Lastausgleich. #?

    @RestController
    @RequiredArgsConstructor
    @RequestMapping("/demo")
    public class DemoController {
    
        private final DemoService demoService;
    
        @GetMapping("/add")
        public String add() {
            return demoService.add(null) + "";
        }
    
        @GetMapping("/selectGoodsInfo")
        public List<GoodsInfo> selectGoodsInfo(){
            return demoService.selectGoodsInfo();
        }
    
        @GetMapping("/selectMasterGoodsInfo")
        public List<GoodsInfo> selectMasterGoodsInfo(){
            return demoService.selectMasterGoodsInfo();
        }
    
    }
    Nach dem Login kopieren
    public interface DemoService {
    
        boolean add(GoodsInfo param);
    
        List<GoodsInfo> selectGoodsInfo();
    
        List<GoodsInfo> selectMasterGoodsInfo();
    
    }
    Nach dem Login kopieren
  • 5. Verifizierungsergebnisse
  • 1. Anfrage zum Hinzufügen einer neuen Schnittstelle (Daten zur Hauptdatenbank hinzufügen): 127.0.0.1: 8086/demo /add
  • 2. Anfrage zur Abfrage der Hauptdatenbank-Datenschnittstelle: 127.0.0.1:8086/demo/selectMasterGoodsInfo

  • # 🎜🎜#3. Slave-Datenschnittstelle anfordern (Lastausgleich):
Erste Anfrage:

Zweite Anfrage: #🎜 🎜#

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Dynamic Datasource zum Konfigurieren mehrerer Datenquellen in SpringBoot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage