Cet article présente la méthode de configuration de l'utilisation de Sharding JDBC pour Spring Boot. Je vais le partager avec vous. Les détails sont les suivants:
illustrer
Pour exclure DataSourceAutoConfiguration, sinon plusieurs sources de données ne peuvent pas être configurées
@ SpringbootApplication @ perteAutoConfiguration (exclude = {dataSourCeutOConfiguration.class}) Application de classe publique {public static void main (String [] args) {SpringApplication.run (application.class, args); }} Les multiples sources de données configurées sont remises à Sharding-JDBC pour la gestion, Sharding-JDBC crée une source de données de source de données pour l'utilisation de MyBatis
Document officiel: http://shardingjdbc.io/index_zh.html
étape
Configurer plusieurs sources de données, il est préférable d'avoir certaines règles pour le nom de la source de données afin de faciliter la configuration des règles de calcul de la base de données.
@Bean (initMethod = "init", destriemithod = "close", name = "dataSource0") @ configurationProperties (prefix = "Spring.datasource") public dataSource dataSource0 () {return new DruidDatasource ();} @ bean (initMethod = "init", destriethod = "close", name = "dataSource1") @ configurationProperties (prefix = "spring.datasource2") public dataSource dataSource1 () {return new DruidDatasource ();} Configurer les règles de source de données, c'est-à-dire remettre plusieurs sources de données à Sharding-JDBC pour la gestion et peut définir des sources de données par défaut. Lorsque le tableau n'a pas de règles de base de données configurées, les sources de données par défaut seront utilisées.
@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); Renvoie un nouveau dataSourCerule (DataSourCemap, "DataSource0");} Configurez les politiques de source de données et les politiques de table et implémentez vous-même des politiques spécifiques.
@BeanPublic Shardingrule Shardingrule (DataSourCerule DataSourCerule) {// Table Politique Tableule OrderTablelele = Tablelele.Builder ("T_Order") .ActualTables (arrays.aslist (T_Order_0 "," T_Order_1 ")). TABESHARDINGY ModuotableShardingalgorithm ())) .DataSourCerule (dataSourCerule) .Build (); Tablerule orderItemTablelerule = Tablelele.Builder ("t_Order_Item") .ActualTables (arrays.aslist ("t_order_item_0", "t_order_item_1")) .tableShardingStrategy (new TableSharDingSstrateg .DataSourCerule (DataSourCerule) .Build (); // Politique de table de liaison, la stratégie de table principale sera utilisée pour calculer la source de données routée lors de l'interrogation, de sorte que les règles du tableau qui acceptent de lier la stratégie du tableau doivent être cohérentes, ce qui peut améliorer l'efficacité dans une certaine étendue <lisingtablelele> bindingTableRules = new ArrayList <BindingTablelele> (); BindingTableLerules.Add (new BindingTableLerUle (arrays.aslist (OrderTableRule, OrderItemTableRule))); return shardingrule.builder () .datasourcerule (dataSourCerule) .tableRules (arrays.aslist (OrderTableleRule) .DatabaseshardingStrategy (new DatabaseshardStrategy ("user_id", new, new, nouveau, nouveau, nouveau, nouveau ", new, nouveau, nouveau", new, nouveau ", nouveau, new, nouveau", nouveau, new, nouveau ", nouveau, nouveau", nouveau ", nouveau, new, nouveau", nouveau, nouveau ", nouveau", nouveau, new, nouveau ", nouveau, nouveau", nouveau, nouveau ", nouveau, nouveau", nouveau, nouveau ", nouveau, nouveau", nouveau, nouveau, " ModulodataBaseshardingAlgorithm ())) .TableShardingStrategy (new TaPhetShardingStrategy ("Order_id", new modulotableShardingalgorithm ())) .build ();} Créer une source de données de source de données pour Sharding-JDBC, que MyBatisAutoConfiguration utilisera
@Bean ("DataSource") public DataSource ShardingDataSource (Shardingrule Shardingrule) {return ShardingDataSourceFactory.CreatedataSource (Shardingrule);} Besoin de configurer manuellement le gestionnaire de transactions (la raison est inconnue)
// La transaction de configuration doit être déclarée manuellement @BeanPublic DataSourceTransactionManager TransacTiTonManager (@qualifier ("DataSource") DataSource DataSource) {return new DataSourceTransactionManager (DataSource);} Implémentation simple de la stratégie de partition de bibliothèque, interface: Databaseshardingalgorithme
import java.util.collection; import java.util.linkedhashset; import com.dangdang.ddframe.rdb.sharding.api.shardingvalue; import com.dangdang.ddframe.rdb.sharding.api.strategy.database.singlekeydatabaseshardingalgorithm; com.google.common.collect.range; / ** * créé par fuwei.deg le 11 mai 2017. * / classe publique modulodatabaseshardingalgorithm singlekeydatabaseshardingalgorithm <long> {@Override public string doequalsharding (collection> databasename, shardingvalue <long> shardevalie) anthens, for databasenames, shardingvalue <long> shardevalue) (String chacun: databasenames) {if (chaque.endswith (shardingValue.getValue ()% 2 + "")) {return chacun; }} lance un nouveau IllégalArgumentException (); } @Override public Collection <string> doinsharding (collection <string> databasenames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashSet <> (databasenames.size ()); pour (Valeur longue: ShardingValue.getValues ()) {for (String TableName: databasenames) {if (tableName.endSwith (valeur% 2 + "")) {result.add (tableName); }} Retour Résultat; } @Override public Collection <string> dobetweensharding (collection <string> databasenames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashSet <> (databasenames.size ()); Range <long> range = (range <long>) shardingValue.getValuerange (); for (long i = range.LowerEndpoint (); i <= range.upperendpoint (); i ++) {for (String e chaque: databasenames) {if (every.endswith (i% 2 + "")) {result.add (chacun); }} Retour Résultat; }} Mise en œuvre de base de la stratégie de sous-étape de la table, interface: Tauxhardingalgorithme
Importer java.util.collection; import java.util.linkedhashset; import com.dangdang.ddframe.rdb.sharding.api.shardingvalue; import com.dangdang.ddframe.rdb.sharding.api.strategy.table.singlekeytableshardingalgorithme; import com.google.common.collect.range; / ** * créé par fuwei.deg le 11 mai 2017. * / Classe publique ModulotableShardingalgorithme implémente un seul string de file TableNames) {if (every.endswith (shardingValue.getValue ()% 2 + "")) {return chacun; }} lance un nouveau IllégalArgumentException (); } @Override public Collection <string> DOINSHARDING (Collection <string> TableNames, ShardingValue <long> ShardingValue) {collection <string> result = new LinkedHashSet <> (tableNames.Size ()); pour (Valeur longue: ShardingValue.getValues ()) {for (String TableName: TableNames) {if (tableName.endSwith (valeur% 2 + "")) {result.add (tableName); }}} Retour Résultat; } @Override public Collection <string> dobetweensharding (collection <string> tableNames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashSet <> (tableNames.size ()); Range <long> range = (range <long>) shardingValue.getValuerange (); for (long i = range.LowerEndpoint (); i <= range.upperendpoint (); i ++) {for (String e chaque: TableNames) {if (chaque.endswith (i% 2 + "")) {result.add (chacun); }} Retour Résultat; }} À ce stade, la fonction de division de la base de données et de division du tableau a été implémentée
Lire et écrire la séparation
La séparation de lecture et d'écriture nécessite d'ajouter une couche de création de source de données maître et d'esclaves avant de créer DataSourCerlele
// Créez une source de données de séparation en lecture-écriture. La source de données de séparation en lecture-écriture implémente l'interface de source de données, qui peut être traitée directement en tant que source de données. // MasterDataSource0, SlaveDataSource00, SlaveDataSource01, etc. sont des sources de données réelles configurées à l'aide de DBCP et d'autres pools de connexion. DataSource Masterslaveds0 = MasterslaveDataSourceFactory.CreateDataSource ("MS_0", MasterDataSource0, SlaveDataSource00, SlaveDatasource01); DataSource MasterslavedS1 = Masterslavedatasourcefactory.CreatEdatasource ("" MS_1 ", MasterDatasource1, SlaveDataSource11, SlaveDataSource11); // Créez une carte de source de données sous-magasin <String, DataSource> DataSourCemap = new HashMap <> (2); DataSourCap.put ("MS_0", MasterslavedS0); // continent ShardingDatasourcefactory Lorsque vous utilisez la bibliothèque principale
HintManager HintManager = HintManager.getInstance (); HintManager.SetMasterRouSeonly (); // Continuer l'opération JDBC
Routage forcé
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 ();Transactions
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.