Este artigo apresenta o método de configuração de usar o sharding jdbc para inicialização da mola. Vou compartilhar com você. Os detalhes são os seguintes:
ilustrar
Para excluir o DataSourCeautoconfiguration, caso contrário, várias fontes de dados não podem ser configuradas
@SpringbooTApplication@enabaAutoconfiguration (exclude = {DataSourCeautoconfiguration.class}) public class Application {public static void main (string [] args) {springapplication.run (Application.class, args); }} As múltiplas fontes de dados configuradas são entregues a sharding-jdbc para gerenciamento, o sharding-jdbc cria uma fonte de dados de fonte de dados para uso mybatis
Documento oficial: http://shardingjdbc.io/index_zh.html
etapa
Configurar várias fontes de dados, é melhor ter certas regras para o nome da fonte de dados para facilitar a configuração das regras de cálculo para o banco de dados.
@Bean (initMethod = "init", DestroyMethod = "Close", Name = "DataSource0")@ConfigurationProperties (prefix = "spring.dataSource") public DataSource DataSource0 () {return druiddataSource ();}@bEan (initmethod = "" name = "DataSource1")@ConfigurationProperties (prefix = "spring.dataSource2") public DataSource DataSource1 () {retorna new DruidDatasource ();} Configurar as regras da fonte de dados, ou seja, entregar várias fontes de dados ao sharding-jdbc para gerenciamento e pode definir fontes de dados padrão. Quando a tabela não possui regras de banco de dados configuradas, as fontes de dados padrão serão usadas.
@BeanPublic DataSourcerule DataSourceLeUle (@qualifier ("DataSource0") DataSource DataSource0, @qualifier ("DataSource1") DataSource DataSource1) {Map <String, DataSource> DataSourceMap = New Hashmap <> (); DataSourCemap.put ("DataSource0", DataSource0); DataSourCemap.put ("DataSource1", DataSource1); Retorne o novo DataSourcelele (DataSourCemap, "DataSource0");} Configure políticas de fonte de dados e políticas de tabela e implemente as políticas específicas.
@BeanPublic ShardingRule shardingRule (DataSourceLeUle DataSourceLeUle) {// Table Tablerule OrderTabLELE = Tablerule.builder ("t_order") .ActualTables (Arrays.asList ("T_Order_0", "t_orderd_1"). ModulotableShardingAlgorithm ()) .DataSourcerrule (DataSourcelele) .build (); Tablerule OrderItemtabLELE = Tablerule.Builder ("T_ORDERS_ITEM") .ActualTables (Arrays.ASLIST ("T_Order_Item_0", "T_Order_item_1") .TabLASHARDINGSRATÉGIA (New TablashardingStrategy ("Order_Id", ModulothShardsArgeting (NEWSHARDINGSRATÉGIA ("Order_Id", ModulothHhNhard .construir(); // Política da tabela de ligação, a estratégia principal da tabela será usada para calcular a fonte de dados roteada ao consultar; portanto, as regras da tabela que concordam em vincular a política da tabela precisam ser consistentes, o que pode melhorar a eficiência em certa medida na lista <dindingTableLele> bindingTableLes = novo ArrayList <HindingTablelelele> (); bindingTabLERULES.add (New BindingTabLELELE (Arrays.ASLIST (OrderTabLEULE, OrderItemTabLELELE))); Retornar shardingRule.builder () .dataSourcerule (DataSoUrcerule) .tableRules (Arrays.asList (OrderTableLele, OrderItemtabLeRule) .BindingTabLERULES (BindingTableLule) .DatabasEShardingStrategy (New DataShardingStrategy ("UserTeRule) .DataSeShardStrategy (New DataShardingStrategy (" UserTerngE). .TabLesHardingStrategy (New TablesHardingstrategy ("Order_id", New ModulotableshardingAlgorithm ()) .Build ();} Crie um conjunto de dados de origem de dados para sharding-jdbc, que Mybatisautoconfiguration usará
@Bean ("DataSource") Public DataSource ShardingDataSource (shardingrule shardingrule) {return shardingdataSourcefactory.createTataSource (shardingrule);} Precisa configurar manualmente o gerente de transação (o motivo é desconhecido)
// A transação de configuração precisa ser declarada manualmente @BeanPublic DataSourCetransActionManager transactionItonManager (@qualifier ("DataSource") DataSource DataSource) {Return DataSourCetransActionManager (DataSource);} Implementação simples da estratégia de partição da biblioteca, interface: DatabasesHardingAlgorithm
importar java.util.collection; importar java.util.LinkedHashSet; importar com.dangdang.dframe.rdb.sharding.api.shardingValue; importar.dangdang.ddframe.rdb.sharding.strategy.matabase.singkydatabashard.sharding.igrategy.matrategase.singkydatabasking.sharding.igrategy.database.singkydatabashard.Sharding.Strategy.MatyMal.MingKeSkyDaMAlDABSHATHELHARD.STRAGEME com.google.common.collect.range;/** * Criado por fuwei.deng em 11 de maio de 2017. */public classe Modulodatabaseshardingalgorithm implementa singkalkaldatabaseshardingalgorithm <long> @override string shortsharding <clection> databas <long> {@override string shortharding> collectioning <stride> datride) Cada um: DatabaseNames) {if (cada.endswith (shardingValue.getValue () % 2 + "")) {return cada; }} lança novo ilegalArgumentException (); } @Override Public Collection <String> doinsharding (coleção <string> DatabaseNames, shardingValue <long> shardingValue) {collection <sting> resultado = new LinkedHashSet <> (DatabaseNames.size ()); para (Longo Valor: ShardingValue.getValues ()) {for (String tableName: DatabaseNames) {if (tableName.endswith (valor % 2 + "")) {resultado.add (tableName); }} Retornar resultado; } @Override Public Collection <String> dobetweensharding (coleção <string> bancos de dados, shardingValue <long> shardingValue) {collection <string> resultado = new LinkedHashSet <> (DatabaseNames.size ()); Range <long> range = (range <long>) shardingValue.getValueRange (); for (i = range.lowerEndPoint (); i <= range.upperrendPoint (); i ++) {for (string cada: databaseNames) {if (cada.ndswith (i % 2+"")) {resultado.add (cada); }} Retornar resultado; }} Implementação básica da estratégia de subestágio de tabela, interface: tableShardingAlgorithm
importar java.util.collection; importar java.util.linkedhashset; importar com.dangdang.dframe.rdb.sharding.api.shardingValue; importar.dangdang.ddframe.rdb.sharding.aptrategy.table.singketKeTelharding.rdb.sharding.Api.strategy.trigut.singketkethitharding.rdb.sharding.api.strategy.tateable.singketkethharding.rdb.sharding.api.strategy.tateable.singketkethlitharding.rdb.sharding.Api.strategy.Table. com.google.common.collect.range;/** * Criado por fuwei.deng em 11 de maio de 2017. */public classe modulotableshardingalgorithm implementa o singlekytableshardingalgorithm <long> {@Override string string doequarding (coleção <mtring> tableNames, shard, shard, shard {@Override string string doequarding (coleção <mtring> tableNames, shard, shard, shard, shard {@Override string doequa {if (cada.endswith (shardingValue.getValue () % 2 + "")) {return cada; }} lança novo ilegalArgumentException (); } @Override Public Collection <String> doinsharding (coleção <string> tableNames, shardingValue <long> shardingValue) {collection <sting> resultado = new LinkedHashSet <> (tableNames.size ()); para (Valor longo: shardingValue.getValues ()) {for (String tableName: tableNames) {if (tableName.endswith (valor % 2 + "")) {resultado.add (tableName); }}} Retornar resultado; } @Override Public Collection <String> dobetweensharding (coleção <string> tableNames, shardingValue <long> shardingValue) {collection <sting> resultado = new LinkedHashSet <> (tableNames.size ()); Range <long> range = (range <long>) shardingValue.getValueRange (); for (long i = range.lowerEndPoint (); i <= range.upperrendPoint (); i ++) {for (string cada: tableNames) {if (cada.endswith (i % 2+"")) {result.add (cada); }} Retornar resultado; }} Neste ponto, a função de dividir o banco de dados e dividir a tabela foi implementada
Leia e escreva separação
Leia e gravação A separação requer a adição de uma camada de criação de fonte de dados mestre e escrava antes de criar DataSourcerulele
// Crie uma fonte de dados de separação de leitura-write. A fonte de dados de separação de leitura-grava implementa a interface do DataSource, que pode ser processada diretamente como fonte de dados. // masterDataSource0, SlaveDataSource00, SlaveDatasource01, etc. são fontes de dados reais configuradas usando o DBCP e outros pools de conexão. DataSource MasterSlAveds0 = MasterSlAveDataSourceFactory.createTataSource ("ms_0", masterDataSource0, slaveDataSource00, escravoSource01); SlaveSource MASTERSLAVEDS1 = masterSlaveDataSourceFactory.createdatasource ("mSS masterSlAveds1 = masterSlaveDataSourCeCactory.createdatasource (" mSS masterSlAveds1 = MasterSlaveDataSourCeCactory.createdAtAtSource ("mSS masterSlAveds1 = masterSlaveDataSourCactory.CreatedAtAtSource (" MSS masterSlAveds1 = masterSlaveDataSourceFactory. SlaveDataSource11); // Construa um mapa de origem de dados da sub-lojas <String, DataSource> DataSourCemap = new Hashmap <> (2); DataSourCemap.put ("ms_0", masterSlaveds0); Continue o shavour para assinar o shavourn; continue para assinar o shavourn; continua sheddsflArtDs; Ao usar a biblioteca principal
HintManager HintManager = HintManager.getInstance ();
Roteamento forçado
HintManager hintManager = hintManager.getInstance (); hintManager.adddatabaseshardingValue ("t_order", "user_id", 1l); hintManager.addtabLeshardingValue ("t_order", "order_id_id", orderorderid ()); "user_id", 1l); hintmanager.addtableShardingValue ("t_orderget_item", "order_id", order.getorderid ());Transações
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.