В этой статье представлен метод конфигурации использования Sharding JDBC для Spring Boot. Я поделюсь этим с вами. Детали следующие:
иллюстрировать
Чтобы исключить DataSourceAutoConfiguration, в противном случае нельзя настроить несколько источников данных
@SpringBootApplication@enableAutoConfiguration (exclude = {dataSourceautoConfiguration.class}) открытый класс приложение {public static void main (string [] args) {SpringApplication.run (Application.class, args); }} Настройки нескольких источников данных передаются Sharding-JDBC для управления, Sharding-JDBC создает источник данных данных для данных MyBatis
Официальный документ: http://shardingjdbc.io/index_zh.html
шаг
Настройте несколько источников данных, лучше всего иметь определенные правила для имени источника данных, чтобы облегчить конфигурацию правил расчета для базы данных.
@Bean (initmethod = "init", destroymethod = "close", name = "dataSource0")@configurationProperties (prefix = "spring.datasource") public DataSource DataSource0 () {return new druiddatasource ();}@bean (initmethod = ", destroymethod =" stock ", stock", stock ", stock", neffect ", glos", neffect ", glos", neffect "," glos ". name = "dataSource1")@configurationProperties (prefix = "spring.datasource2") public DataSource DataSource1 () {return new druiddatasource ();} Настройте правила источника данных, то есть передайте несколько источников данных Sharding-JDBC для управления и могут установить источники данных по умолчанию. Когда в таблице не настроены правила базы данных, будут использоваться источники данных по умолчанию.
@BeanPublic DataSourcerule DataSourcerule (@Qualifier ("dataSource0") DataSource DataSource0, @qualifier ("dataSource1") DataSource DataSource1) {map <String, dataSource> dataSourcemA = new hashmap <> (); dataSourcemap.put ("dataSource0", dataSource0); dataSourcemap.put ("dataSource1", dataSource1); вернуть новую DataSourcerule (dataSourceMap, "dataSource0");} Настройте политики источника данных и политики таблицы, и самостоятельно реализуйте конкретные политики.
@Beanpublic shardingrule shardingrule (dataSourCerule DataSourcerule) {// Таблица таблицы таблеток OrderTableRule = tableRule.builder ("t_order"). Actualtables (arrays.aslist ("T_ORDER_0", "T_ORDE_1) .tableshardingS 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_IdeSharteShartegyGrith .datasourcerule (dataSourcerule) .build (); // Политика привязки таблицы таблицы, основная стратегия таблицы будет использоваться для расчета маршрутизированного источника данных при запросе, поэтому правила таблицы, которые согласны связывать политику таблицы, должны быть согласованными, что может повысить эффективность до определенной степени списка степени <BindingTableRule> BindingTablerules = new ArrayList <bdingTableRule> (); 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 ModuloDatabaseShardingAlgorithm())) .tableShardingStrategy (New TableShardingStrategy ("order_id", new ModulotableshardingAlgorithm ())) .build ();} Создайте данные источника данных для Sharding-JDBC, который будет использовать mybatisautoconfiguration
@Bean ("DataSource") Открытый данных ShardingDataSource (ShardingRule ShardingRule) {return shardingdatasourcefactory.createdatasource (shardingrule);} Необходимо вручную настраивать диспетчер транзакций (причина неизвестна)
// транзакция на конфигурации должна быть объявлена вручную @beanpublic dataSourcETransActionManager TransactionItonManager (@Qualifier ("DataSource") DataSource DataSource) {return New DataSourcEtransActionManager (dataSource);}; Простая реализация стратегии разделения библиотеки, интерфейс: база данных
import java.util.collection; import java.util.linkedhashset; import com.dangdang.ddframe.rdb.sharding.api.shardingvalue; импорт com.dangdang.ddframe.rdb.sharding.api.strategy.database.singlekekeykaseshardalgorgorithmithmithmithmithmithm com.google.common.collect.range;/** * Создан Fuwei.deng 11 мая 2017 года. */Public Class ModuloDabaseShardingAlgorithm реализует SingleKeyDataBaseShardingAlgorithm <Long> {@Override public Stringsharding (Collection <String> DataBasEnames, shardingValue <lase> Shardvale <lay> shardevale <louse> shardevale <louse> shardu DatabaseNames) {if (chany.endswith (shardingvalue.getValue () % 2 + "")) {вернуть каждый; }} бросить new allogalargumentException (); } @Override Public Collection <string> doInSharding (Collection <string> DatabasEnames, ShardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (databaseNames.size ()); для (длинное значение: shardingvalue.getValues ()) {for (String TableName: DatabasENames) {if (tablename.endswith (значение % 2 + "")) {result.add (tableName); }} return result; } @Override public Collection <string> dobetweensharding (collection <string> databaseNames, shardingvalue <long> shardingvalue) {collection <string> result = new LinkedHashset <> (DatabasEnames.size ()); Диапазон <long> range = (range <long>) shardingvalue.getValuerAnge (); for (long i = range.lowerendpoint (); i <= range.upperendpoint (); i ++) {for (string ingy: databaseNames) {if (каждый.endswith (i % 2+"")) {result.Add (каждый); }} return result; }} Основная реализация стратегии подразделения таблицы, интерфейс: TableShardingAlgorithm
Импорт java.util.collection; import java.util.linkedhashset; import com.dangdang.ddframe.rdb.sharding.api.shardingvalue; import com.dangdang.ddframe.rdb.sharding.api.trategy.table.singlekeytableshardinglgorithm; com.google.common.collect.range;/** * Создано Fuwei.deng 11 мая 2017 года. */Public Class ModulotableShardingAlgorithm реализует SingleKeyTableShardingAlgorithm <long> {@Override public Stringsharding (Collection <String> TableNames, shardingvalue <land> shardingvale) if (chany.endswith (shardingvalue.getvalue () % 2 + "")) {вернуть каждый; }} бросить new allogalargumentException (); } @Override Public Collection <String> doInSharding (Collection <string> TableneNames, ShardingValue <long> shardingValue) {collection <string> result = new LinkedHashSet <> (tableNames.size ()); для (длинное значение: shardingvalue.getvalues ()) {for (String tableName: tablenames) {if (tablename.endswith (value % 2 + "")) {result.add (tableName); }}} return result; } @Override Public Collection <string> Dobetweensharding (Collection <string> TableNames, ShardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (tablenames.size ()); Диапазон <long> range = (range <long>) shardingvalue.getValuerAnge (); for (long i = range.lowerendpoint (); i <= range.upperendpoint (); i ++) {for (string ealh: tableNames) {if (wyally.endswith (i % 2+"")) {result.Add (каждый); }} return result; }} На этом этапе была реализована функция деления базы данных и деления таблицы
Читать и написать разделение
Разделение для чтения и записи требует добавления слоя создания мастер -и рабов
// Создание источника данных разделения чтения-записи. Источник данных разделения чтения-записи реализует интерфейс данных DataSource, который может быть непосредственно обрабатываться в качестве источника данных. // MasterDatasource0, SlavedAtasource00, SlavedAtasource01 и т. Д. - это реальные источники данных, настроенные с использованием DBCP и других пулов соединений. DataSource MasterSlavedS0 = MasterSlavedAtasourceFactory.createdAtasource («MS_0», MasterDataSource0, Slavedatasource00, Slavedatasource01); DataSource Masterslaveds1 = Masterslavedatasupory.createDatasource (MS1, GaverSlavedAtasOrce. slavedatasource11, slavedatasource11); // Создание карты источника данных в суб-магазине <String, dataSource> dataSourcemap = new Hashmap <> (2); dataSourcemap.put ("ms_0", Masterslaveds0); DataSourcemap.put ("ms_1", masterslaveds1); Shardingdatasourcefactory При использовании основной библиотеки
Hintmanager hintmanager = hintmanager.getinstance (); hintmanager.setmasterrouteonly (); // Продолжить операцию JDBC
Принудительная маршрутизация
Hintmanager hintmanager = hintmanager.getinstance (); hintmanager.addatabaseShardingValue ("t_order", "user_id", 1L); hintmanager.addtableshardingValue ("t_dord", "order_id", order.getOrderId ()); hintmanager.addadatabaseShardingValue ("t_order_item", "user_id", 1L); hintmanager.addtableShardingValue ("t_order_item", "order_id", order.getordordId ());Транзакции
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.