In diesem Artikel wird die Konfigurationsmethode zur Verwendung von Sharding JDBC für Spring Start vorgestellt. Ich werde es mit Ihnen teilen. Die Details sind wie folgt:
veranschaulichen
Um DataSourceAutoConfiguration auszuschließen, können ansonsten mehrere Datenquellen nicht konfiguriert werden
@SpringBootApplication@EnableAutoConfiguration (exklude = {dataSourceAutoConfiguration.class}) öffentliche Klasse -Anwendung {public static void main (String [] args) {SpringApplication.run (application.class.class, args); }} Die konfigurierten mehreren Datenquellen werden Sharding-JDBC für die Verwaltung übergeben. Sharding-JDBC erstellt eine Datenquelle für die Verwendung von Datenquellen für die Verwendung von MyBatis
Offizielles Dokument: http://shardingjdbc.io/index_zh.html
Schritt
Konfigurieren Sie mehrere Datenquellen. Es ist am besten, bestimmte Regeln für den Namen der Datenquelle zu haben, um die Konfiguration der Berechnungsregeln für die Datenbank zu erleichtern.
@Bean(initMethod="init", destroyMethod="close", name="dataSource0")@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource0(){ return new DruidDataSource();}@Bean(initMethod="init", destroyMethod="close", name = "dataSource1")@configurationProperties (Präfix = "Spring.DataSource2") public DataSource DataSource1 () {Neue druidDataSource ();};} Konfigurieren Sie die Datenquellenregeln, dh mehrere Datenquellen an Sharding-JDBC für die Verwaltung übergeben und können Standarddatenquellen festlegen. Wenn in der Tabelle keine Datenbankregeln konfiguriert sind, werden die Standarddatenquellen verwendet.
@BeanPublic DataSourcerule dataSourcerule (@Qualifier ("dataSource0") DataSource dataSource0, @Qualifier ("dataSource1") DataSource dataSource1) {MAP <String, DataSource> dataSourcemap = new Hashmap <> (); DataSourcemap.put ("DataSource0", DataSource0); DataSourcemap.put ("DataSource1", DataSource1); Neue DataSourcerule zurückgeben (DataSourcemap, "DataSource0");} Konfigurieren Sie Datenquellenrichtlinien und Tabellenrichtlinien und implementieren Sie selbst bestimmte Richtlinien.
@BeanPublic Shardingrule Shardingrule (DataSourcerule dataSourcerule) {// Tabelle Richtlinienpolizei orderUlerule = tablerule.builder ("t_order") .Actualtables (Arrays.aslist ("t_order_0", "t_order_1"). Modulotableshardingalgorithmus ())) .DataSourcerule (DataSourcerule) .build (); Tablerule orderItemtablerule = tablerule.builder ("t_order_item") .actualtables (arrays.aslist ("t_order_item_0", "t_order_item_1") .tableshardingStrategy (New TableShardinggy ("Order_id_id", New ModullotableShardalgoritalgorithm ())))) .DataSourcerule (DataSourcerule) .build (); // Bindungstabelle Richtlinie, die Haupttabellenstrategie wird verwendet, um die Routed -Datenquelle bei der Abfrage zu berechnen. Daher müssen die Regeln der Tabelle, die sich für die Bindung der Tabellenrichtlinie einig sind, konsistent sein, was die Effizienz in gewissem Umfang liste <bindingTablerule> BindingTablerules = New ArrayList <bindingTablerule> () verbessern kann. bindingTablerules.add (new BindingTablerule (Arrays.aSlist (Ordertablerule, OrderItemTablerule))); return ShardingRule.builder() .dataSourceRule(dataSourceRule) .tableRules(Arrays.asList(orderTableRule, orderItemTableRule)) .bindingTableRules(bindingTableRule) .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new Modulodatabaseshardingalgorithmus ())) .TableshardingStrategy (neuer TableshardingStrategy ("Order_id", neuer Modulotableshardingalgorithmus ()) .build ();};};};};};}; Erstellen Sie eine Datenquellendatenquelle für Sharding-JDBC, die MyBatisAutoconfiguration verwenden wird
@Bean ("DataSource") public DataSource ShardingDataSource (Shardingrule Shardingrule) {return ShardingDataSourceFactory.Createdatasource (Shardingrule);}; Müssen den Transaktionsmanager manuell konfigurieren (der Grund ist unbekannt)
// Die Konfigurationstransaktion muss manuell @BeanPublic DataSourcetransactionManager TransactionitonManager (@Qualifier ("DataSource") DataSource DataSource) {neuer DataSourCetransactionManager (DataSource);} zurückgeben, deklariert werden. Einfache Implementierung der Bibliothekspartitionsstrategie, Schnittstelle: DatabaseShardingalgorithmus
Import Java.util.Collection; Import Java.util.linkedHashset; Import com.dangdang.ddframe.rdb.sharding.api.shardingValue; com.google.common.collect.Range;/** * Erstellt von fuwei.deng am 11. Mai 2017. für (Zeichenfolge jeweils: Databasenamen) {if (jeweils (endswith (shardingValue.getValue () % 2 + "")) {jeweils zurückgeben; }} werfen Sie neue illegalArgumentException (); } @Override public collection <string> doInSharding (Sammlung <string> Datenbankasemamen, ShardingValue <Lonong> shardingValue) {collection <string> result = new linkedHashset <> (Databasenamen.size ()); für (langer Wert: shardingValue.getValues ()) {für (String tableName: Databasenamen) {if (tableName.endswith (value % 2 + ")) {result.add (tableName); }} Rückgabeergebnis; } @Override public collection <string> dobetweensharding (collection <string> databaseNames, shardingValue <Long> shardingValue) {collection <string> result = new LinkedHashset <> (Databasenamen.size ()); Range <Lang> Range = (Bereich <Lang>) ShardingValue.getValuerange (); für (long i = range.lowerendpoint (); i <= range.upperendpoint (); i ++) {für (String jeweils: Datenbasisnamen) {if (jeder.endswith (i % 2+"") {result.add (jeweils); }} Rückgabeergebnis; }} Grundlegende Implementierung der Tabellen-Unterstufe Strategie, Schnittstelle: Tableshardingalgorithmus
Import Java.util.Collection; Import Java.util.linkedHashset; Import com.dangdang.ddframe.rdb.sharding.api.shardingValue; Import com.dangdang.ddframe.rdb.Sharding.api.strategy.table com.google.common.collect.Range;/** * Erstellt von fuwei.deng am 11. Mai 2017. TableNames) {if (jeweils.endswith (shardingValue.getValue () % 2 + "")) {return jeweils; }} werfen Sie neue illegalArgumentException (); } @Override public collection <string> doInsharding (Sammlung <string> tableName, shardingValue <Long> shardingValue) {collection <string> result = new linkedHashset <> (tableNames.size ()); für (langer Wert: shardingValue.getValues ()) {für (String tableName: tableName) {if (tableName.endswith (value % 2 + "") {result.add (tableName); }}} Rückgabeergebnis; } @Override public collection <string> dobetweensharding (collection <string> tableName, shardingValue <Long> shardingValue) {collection <string> result = new LinkedHashset <> (TableNames.size ()); Range <Lang> Range = (Bereich <Lang>) ShardingValue.getValuerange (); für (long i = range.lowerendpoint (); i <= range.upperendpoint (); i ++) {für (String jeweils: tableName) {if (Every.endswith (i % 2+")) {result.add (jeweils); }} Rückgabeergebnis; }} Zu diesem Zeitpunkt wurde die Funktion zur Aufteilung der Datenbank und die Aufteilung der Tabelle implementiert
Trennung lesen und schreiben
Lesen und Schreiben müssen eine Ebene der Erstellung von Master- und Slave -Datenquellen hinzufügen, bevor DataSourcerule erstellt wird
// Erstellen Sie eine Lese-schreiber-Trennungsdatenquelle. Die Read-Write-Trennungsdatenquelle implementiert die DataSource-Schnittstelle, die direkt als Datenquelle verarbeitet werden kann. // MasterDataSource0, Slavedatasource00, Slavedatasource01 usw. sind echte Datenquellen, die mit DBCP und anderen Verbindungspools konfiguriert sind. DataSource masterSlaveDs0 = MasterSlaveDataSourceFactory.createDataSource("ms_0", masterDataSource0, slaveDataSource00, slaveDataSource01);DataSource masterSlaveDs1 = MasterSlaveDataSourceFactory.createDataSource("ms_1", masterDataSource1, slaveDataSource11, SlavedataSource11); // Erstellen Sie eine Sub-Store-Datenquellenkarte <String, DataSource> dataSourcemap = new Hashmap <> (2); DataSourcemap.put ("MS_0", Mastersslaveds0; DataSourcemap.put ("MS_1", Mastlaveds1). Bei Verwendung der Hauptbibliothek
HintManager Hintmanager = Hintmanager.getInstance (); Hintmanager.SetMasterRouteonly (); // Fortsetzung des JDBC -Betriebs
Erzwungenes Routing
HintManager Hintmanager = HintManager.getInstance (); Hintmanager.AddDatabaseshardingValue ("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 ());Transaktionen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.