Ciri fungsian:
Menyokong pengumpulan sumber data, sesuai untuk pelbagai senario, pangkalan data berbilang tulen, pengasingan baca-tulis, satu induk, berbilang budak, mod campuran.
Menyokong permulaan tanpa sumber data dan menyokong konfigurasi sumber data permulaan malas (3.3.2+).
Sokong penyulitan maklumat konfigurasi sensitif pangkalan data ENC().
Menyokong permulaan bebas skema struktur jadual dan pangkalan data pangkalan data untuk setiap pangkalan data.
Menyokong anotasi tersuai dan perlu mewarisi DS (3.2.0+).
Menyediakan integrasi pantas untuk Druid, Mybatis-Plus, P6sy, Jndi.
Permudahkan konfigurasi Druid dan HikariCp dan sediakan konfigurasi parameter global. Konfigurasikan sekali dan gunakannya secara global.
Sediakan penyelesaian sumber data tersuai.
Menyediakan penyelesaian untuk menambah dan mengalih keluar sumber data secara dinamik selepas projek dimulakan.
Menyediakan penyelesaian pemisahan baca-tulis tulen dalam persekitaran Mybatis.
Menyediakan kaedah untuk menghuraikan penyelesaian sumber data, menggunakan parameter dinamik SpEL. Ejaan terbina dalam, sesi, pengepala, penyesuaian sokongan.
Menyokong penukaran bersarang sumber data berbilang lapisan. (ServiceA >>> ServiceB >>> ServiceC).
Menyediakan penyelesaian, langkah berjaga-jaga dan contoh untuk menyepadukan perpustakaan pihak ketiga seperti shiro, sharding-jdbc, kuarza, dll.
Menyediakan penyelesaian transaksi teragih berdasarkan seata. Lampiran: Transaksi musim bunga asli tidak disokong.
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
Daripada perpustakaan 1: PiaoDB2
Dari perpustakaan 2: PiaoDB3
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>
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
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); } }
Sesetengah versi springBoot mungkin tidak boleh dikecualikan dan boleh dikecualikan dalam cara berikut.
spring: autoconfigure: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
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:
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(); } }
2. Perkhidmatan Tulis
public interface DemoService { boolean add(GoodsInfo param); List<GoodsInfo> selectGoodsInfo(); List<GoodsInfo> selectMasterGoodsInfo(); }
@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(); } }
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/selectMasterGoodsInfo3. Minta antara muka data hamba (pengimbangan beban):
Permintaan pertama :Permintaan kedua:
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!