Artikel ini memperkenalkan metode konfigurasi menggunakan sharding JDBC untuk Spring Boot. Saya akan membaginya dengan Anda. Dengan rincian sebagai berikut:
menjelaskan
Untuk mengecualikan DataSourceAutoconfiguration, jika tidak, beberapa sumber data tidak dapat dikonfigurasi
@SpringbootApplication@enableAutoconfiguration (exclude = {DataSourCeAutoconfiguration.class}) Aplikasi kelas publik {public static void main (string [] args) {springapplication.run (application.class, args); }} Beberapa sumber data yang dikonfigurasi diserahkan kepada sharding-jdbc untuk manajemen, sharding-jdbc membuat sumber data sumber data untuk penggunaan mybatis
Dokumen Resmi: http://shardingjdbc.io/index_zh.html
melangkah
Konfigurasikan beberapa sumber data, yang terbaik adalah memiliki aturan tertentu untuk nama sumber data untuk memfasilitasi konfigurasi aturan perhitungan untuk database.
@Bean (initmethod = "init", nodaMethod = "tutup", name = "DataSource0")@configurationproperties (prefix = "spring.datasource") data data data public@bean () {return druiddataSource ();}@bean (initmethod = "init" init "init" init ("init", init ", init", init ", init", init (init "(init", init (init ", init (init", init (init "(init", init (init "(init", init (init "(init" (init ", init (init", name = "DataSource1")@ConfigurationProperties (prefix = "spring.datasource2") DataSource public DataSource1 () {return new druidDataSource ();} Mengkonfigurasi aturan sumber data, yaitu, menyerahkan beberapa sumber data ke Sharding-JDBC untuk manajemen, dan dapat mengatur sumber data default. Ketika tabel tidak memiliki aturan basis data yang dikonfigurasi, sumber data default akan digunakan.
@BeanPublic DataSourCerule DataSourCerule (@Qualifier ("DataSource0") DataSource DataSource0, @Qualifier ("DataSource1") DataSource DataSource1) {peta <String, DataSource> DATASOURCEMAP = new hashMap <) (); DataSourCeMap.put ("DataSource0", DataSource0); DataSourCeMap.put ("DataSource1", DataSource1); Return New DataSourCerule (DataSourCeMap, "DataSource0");} Konfigurasikan kebijakan sumber data dan kebijakan tabel, dan terapkan kebijakan spesifik sendiri.
@BeanPublic Shardingrule Shardingrule (DataSourcerule Datasourcerule) {// Table Policy Tablerule orderTablerule = tablerule.builder ("t_order") .ActualTables (arrays.aslist ("t_order_0", "t_order_1")). ModulotableShardingAlgorithm ())) .datasourcerule (DatasourCerule) .build (); TableRule orderItemTableRule = TableRule.builder("t_order_item") .actualTables(Arrays.asList("t_order_item_0", "t_order_item_1")) .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())) .datasourcerule (DatasourCerule) .build (); // Kebijakan tabel yang mengikat, strategi tabel utama akan digunakan untuk menghitung sumber data yang dialihkan saat menanyakan, sehingga aturan tabel yang setuju untuk mengikat kebijakan tabel harus konsisten, yang dapat meningkatkan efisiensi ke daftar tingkat tertentu <IndingTablerule> bindingTablerules = new arraylist <bindingtablerule> (); BINDINGTABLERUS.ADD (BINDINGTABLERULE baru (arrays.aslist (ordertablerule, orderitemtablerule))); return shardingrule.builder () .datasourcerule (DatasourCerule) .tablerules (arrays.aslist (orderTablerule, orderitemtablerule)) .bindingTablerules (BINDINGTABLERULE) .DataBaseShardategy (New DataSeshardingStrategy) .DataBaseShardategy (New DataSeshardingingStrategy), New DataSeshardingingStrategy), New DataSeshardingingstrategy), New DataSeshardingingingstrategy (New DataSeshardinginging ModulodatabaseshardingAlgorithm ())) .TableShardingStrategy (TableShardingStrategy baru ("order_id", ModulotableShardingAlgorithm baru ())) .build ();} Buat sumber data sumber data untuk sharding-jdbc, yang akan digunakan mybatisautoconfiguration
@Bean ("DataSource") DataSource Publik ShardingDataSource (Shardingrule Shardingrule) {return ShardingDataSourceFactory.createDataSource (ShardingRule);} Perlu mengonfigurasi Manajer Transaksi secara manual (alasannya tidak diketahui)
// Konfigurasi Transaksi harus dinyatakan secara manual @BeanPublic DataSourCetRansactionManager transactionitonManager (@qualifier ("DataSource") DataSource DataSource) {return New DataSourCetRansactionManager (DataSource);} Implementasi Sederhana dari Strategi Partisi Perpustakaan, Antarmuka: DatabaseshardingAlgorithma
impor java.util.collection; import java.util.linkedhashset; impor com.dangdang.ddframe.rdb.sharding.api.shardingValue; import com.dangdang.ddframe.rdb.sharding.api.strategy.database.singleKey com.google.common.collect.range;/** * Dibuat oleh fuwei.deng pada 11 Mei 2017. */Kelas publik ModulodatabaseshardingAlgorithm mengimplementasikan singleKeyDataBaseshardingingAlgorithm <long> {@Override Public String doequalsharding (koleksi <string> databObyithm, @Override Public String doequalsharding (collection <collection> Databasorhm <long> {@Override public string doequalsharding (collection <collection> databorithm <long>, @Override public string doequalsharding (collection <collection> databoritm (String masing -masing: DataBasEnames) {if (masing -masing. }} lempar IllegalArgumentException baru (); } @Override Public Collection <string> doinsharding (collection <string> DataBasEnames, shardingValue <mendong> shardingValue) {collection <string> result = new LinkedHashSet <> (DataBasEnames.size ()); untuk (nilai panjang: shardingValue.getValues ()) {for (string tableName: databaseNames) {if (tableName.endswith (nilai % 2 + "))) {result.add (tableName); }} hasil pengembalian; } @Override Public Collection <string> dobetweensharding (koleksi <string> DataBasEnames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (DataBasEnames.size ()); Range <long> range = (range <long>) shardingValue.getValueange (); untuk (long i = range.lowerEndPoint (); i <= range.upperendpoint (); i ++) {for (string masing -masing: DataBasEnames) {if (masing -masing. }} hasil pengembalian; }} Implementasi Dasar Strategi Sub-tahap Tabel, Antarmuka: TableshardingAlgorithma
Impor java.util.collection; import java.util.linkedhashset; impor com.dangdang.ddframe.rdb.sharding.api.shardingValue; import com.dangdang.ddframe.rdb.sharding.api.strategy.table.singleKeytable.rdb.sharding.api.strategy.table.singleKeytableSe.rdb.sharding.api.strategy.table.singleKeytable.rdb.sharding.api.strategy.table.singleKeytableS com.google.common.collect.Range;/** * Created by fuwei.deng on May 11, 2017. */public class ModuloTableShardingAlgorithm implements SingleKeyTableShardingAlgorithm<Long> { @Override public String doEqualSharding(Collection<String> tableNames, ShardingValue<Long> shardingValue) { for (String each : tableNames) {if (masing -masing.endswith (shardingValue.getValue () % 2 + "")) {return masing -masing; }} lempar IllegalArgumentException baru (); } @Override Public Collection <string> doinsharding (koleksi <string> Tablenames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (tableNames.size ()); untuk (nilai panjang: shardingValue.getValues ()) {for (string tableName: tableNames) {if (tableName.endswith (nilai % 2 + ")) {result.add (tableNeName); }}} hasil pengembalian; } @Override Public Collection <string> dobetweensharding (koleksi <string> Tablenames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (tableNames.size ()); Range <long> range = (range <long>) shardingValue.getValueange (); untuk (long i = range.lowerEndPoint (); i <= range.upperendpoint (); i ++) {for (string masing -masing: tableNames) {if (masing -masing. }} hasil pengembalian; }} Pada titik ini, fungsi membagi database dan membagi tabel telah diimplementasikan
Baca dan Tulis Perpisahan
Baca dan Tulis Pemisahan Perlu Menambahkan Lapisan Pembuatan Sumber Data Master dan Slave Sebelum Membuat DataSourcerule
// Bangun sumber data pemisahan baca-tulis. Sumber data pemisahan baca-tulis mengimplementasikan antarmuka DataSource, yang dapat secara langsung diproses sebagai sumber data. // MasterDataSource0, SlavedataSource00, SlavedataSource01, dll. adalah sumber data nyata yang dikonfigurasi menggunakan DBCP dan kumpulan koneksi lainnya. DataSource masterslaveds0 = masterslavedataSourceFactory.createdataSource ("ms_0", masterdataSource0, slavedataSource00, slavedataSource01); dataSource (porselaveds1 = mastterslavedataceFaktora.crource.crource (mserterslavedataCeFacory. slaveDataSource11, slaveDataSource11);// Build a sub-store data source Map<String, DataSource> dataSourceMap = new HashMap<>(2);dataSourceMap.put("ms_0", masterSlaveDs0);dataSourceMap.put("ms_1", masterSlaveDs1);// Continue to create ShardingDataSource through ShardingDataSourceFactory Saat menggunakan perpustakaan utama
HintManager HintManager = HintManager.getInstance (); HintManager.SetMasterRouteonly (); // Lanjutkan operasi JDBC
Routing paksa
HintManager HintManager = HintManager.getInstance (); HintManager.AddataBaseshardingValue ("t_order", "user_id", 1l); hintmanager.addtableShardingValue ("t_order", "order_id", order.getOrderId ()); hintmanager.adddatabaseshardingValue ("t_order_item", "user_id", 1l); hintmanager.addtableShardingValue ("t_order_item", "order_id", order.getorderid ());Transaksi
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.