Rumah > Java > javaTutorial > Cara menggunakan Sumber Data Dinamik untuk mengkonfigurasi berbilang sumber data dalam SpringBoot

Cara menggunakan Sumber Data Dinamik untuk mengkonfigurasi berbilang sumber data dalam SpringBoot

PHPz
Lepaskan: 2023-05-16 19:07:23
ke hadapan
2682 orang telah melayarinya

Ciri fungsian:

  1. Menyokong pengumpulan sumber data, sesuai untuk pelbagai senario, pangkalan data berbilang tulen, pengasingan baca-tulis, satu induk, berbilang budak, mod campuran.

  2. Menyokong permulaan tanpa sumber data dan menyokong konfigurasi sumber data permulaan malas (3.3.2+).

  3. Sokong penyulitan maklumat konfigurasi sensitif pangkalan data ENC().

  4. Menyokong permulaan bebas skema struktur jadual dan pangkalan data pangkalan data untuk setiap pangkalan data.

  5. Menyokong anotasi tersuai dan perlu mewarisi DS (3.2.0+).

  6. Menyediakan integrasi pantas untuk Druid, Mybatis-Plus, P6sy, Jndi.

  7. Permudahkan konfigurasi Druid dan HikariCp dan sediakan konfigurasi parameter global. Konfigurasikan sekali dan gunakannya secara global.

  8. Sediakan penyelesaian sumber data tersuai.

  9. Menyediakan penyelesaian untuk menambah dan mengalih keluar sumber data secara dinamik selepas projek dimulakan.

  10. Menyediakan penyelesaian pemisahan baca-tulis tulen dalam persekitaran Mybatis.

  11. Menyediakan kaedah untuk menghuraikan penyelesaian sumber data, menggunakan parameter dinamik SpEL. Ejaan terbina dalam, sesi, pengepala, penyesuaian sokongan.

  12. Menyokong penukaran bersarang sumber data berbilang lapisan. (ServiceA >>> ServiceB >>> ServiceC).

  13. Menyediakan penyelesaian, langkah berjaga-jaga dan contoh untuk menyepadukan perpustakaan pihak ketiga seperti shiro, sharding-jdbc, kuarza, dll.

  14. Menyediakan penyelesaian transaksi teragih berdasarkan seata. Lampiran: Transaksi musim bunga asli tidak disokong.

  15. Menyediakan penyelesaian transaksi sumber berbilang data tempatan. Lampiran: Transaksi musim bunga asli (3.3.1+) tidak disokong.

Artikel kami terutamanya melaksanakan pengasingan membaca dan menulis, dan persekitaran satu tuan, berbilang hamba.

  • Adalah disyorkan bahawa pangkalan data utama hanya melaksanakan operasi INSERT, UPDATE dan DELETE.

  • Cadangkan operasi PILIH sahaja daripada pangkalan data.

1 Sediakan pangkalan data

Pangkalan data utama: PiaoDB

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

Daripada perpustakaan 1: PiaoDB2

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

Dari perpustakaan 2: PiaoDB3

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

2. Import fail POM

Pengenalan dynamic-datasource-spring-boot-starter.

<!-- 多数据源 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>
Salin selepas log masuk

3. Edit fail konfigurasi

Kami mengkonfigurasi pangkalan data induk dan dua pangkalan data hamba.

  • "Pengepala" semua sumber data yang dipisahkan dengan garis bawah _ dalam fail konfigurasi ialah nama kumpulan Sumber data dengan nama kumpulan yang sama akan diletakkan di bawah satu kumpulan.

  • Nama sumber data lalai ialah induk, yang boleh kami ubah suai melalui spring.datasource.dynamic.primary.

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
Salin selepas log masuk

Oleh kerana kami menggunakan kumpulan sambungan pangkalan data Alibaba Druid, kami perlu mengecualikan kelas konfigurasi pantas Druid asli.

Alamat penyepaduan pihak ketiga yang lain: Penyepaduan Druid

@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}
Salin selepas log masuk

Sesetengah versi springBoot mungkin tidak boleh dikecualikan dan boleh dikecualikan dalam cara berikut.

spring:
  autoconfigure:
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
Salin selepas log masuk

Selain mengkonfigurasi satu tuan dan berbilang hamba, kami juga boleh mengkonfigurasinya.

# 多主多从                      纯粹多库(记得设置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:
Salin selepas log masuk

4. Tulis kod

Gunakan @DS untuk menukar sumber data. @DS boleh diberi anotasi pada kaedah dan kelas. Jika kedua-duanya wujud, anotasi kaedah diutamakan daripada anotasi kelas. Adalah amat disyorkan untuk menganotasi pelaksanaan perkhidmatan atau kaedah antara muka pemeta.

  • @DS("xxx") menentukan sumber data xxx, dengan xxx boleh menjadi nama kumpulan atau nama perpustakaan tertentu. Jika ia adalah nama kumpulan, algoritma pengimbangan beban digunakan semasa menukar. Jika nama kumpulan atau pustaka yang ditentukan tidak wujud, sumber data lalai (pustaka utama) akan digunakan secara automatik

  • Jika tiada @DS, sumber data lalai (pustaka utama) akan digunakan

  • Jika @DS ditetapkan tetapi tiada kumpulan atau pustaka ditentukan, perpustakaan hamba dipilih mengikut strategi DynamicDataSourceStrategy. Dasar imbangan beban lalai.

1. Pengawal Tulis

@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();
    }

}
Salin selepas log masuk

2. Perkhidmatan Tulis

public interface DemoService {

    boolean add(GoodsInfo param);

    List<GoodsInfo> selectGoodsInfo();

    List<GoodsInfo> selectMasterGoodsInfo();

}
Salin selepas log masuk
@Service
@RequiredArgsConstructor
public class DemoServiceImpl implements DemoService {

    private final DemoMapper demoMapper;

    @DS("master")
    @Override
    public boolean add(GoodsInfo param) {
        param = new GoodsInfo();
        param.setGname("1200元秒杀华为Pad");
        param.setGnum(100);

        return demoMapper.insertGoodsInfo(param);
    }

    @DS("slave")
    @Override
    public List<GoodsInfo> selectGoodsInfo() {
        return demoMapper.selectGoodsInfo();
    }

    @DS("master")
    @Override
    public List<GoodsInfo> selectMasterGoodsInfo() {
        return demoMapper.selectGoodsInfo();
    }

}
Salin selepas log masuk

3 >5. Hasil pengesahan

1 Permintaan untuk menambah antara muka baharu (tambah data ke pangkalan data utama): 127.0.0.1:8086/demo/add

2 tanya antara muka data pangkalan data utama: 127.0.0.1:8086/demo/selectMasterGoodsInfo

3. Minta antara muka data hamba (pengimbangan beban): SpringBoot中如何使用Dynamic Datasource配置多数据源

Permintaan pertama :

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

Atas ialah kandungan terperinci Cara menggunakan Sumber Data Dinamik untuk mengkonfigurasi berbilang sumber data dalam SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan