이 기사에서는 Spring Boot에 Sharding JDBC를 사용하는 구성 방법을 소개합니다. 나는 그것을 당신과 공유 할 것입니다. 세부 사항은 다음과 같습니다.
설명
DataSourceautoconfiguration을 제외하려면 여러 데이터 소스를 구성 할 수 없습니다.
@springbootApplication@enableAutoconFiguration (exclude = {dataSourceAutoConfiguration.class}) 공개 클래스 응용 프로그램 {public static void main (String [] args) {springApplication.Run (Application.Class, Args); }} 구성된 여러 데이터 소스가 관리를 위해 Sharding-JDBC에 양도되면 Sharding-JDBC는 MyBatis 사용을위한 DataSource 데이터 소스를 만듭니다.
공식 문서 : 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 = "init", DestionMethod = "" 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> DataSourceCemap = New HashMap <> (); DataSourcemap.put ( "DataSource0", DataSource0); DataSourcemap.put ( "DataSource1", DataSource1); 새 DataSourcerule (DataSourcemap, "DataSource0");} 반환 데이터 소스 정책 및 테이블 정책을 구성하고 특정 정책을 직접 구현하십시오.
@BeanPublic ShardingRule ShardingRule (DataSourcerule DataSourcerule) {// 테이블 정책 tablerule ordertaberule = taberule.builder ( "t_order") .ActualTables ( "t_order_0", "T_Order_1") (정서적 TableStrateSgy (new TableStateTrategy ( "). ModulotableShardingAlgorithm ())) .datasourcerule (dataSourcerule) .build (); TableRule OrderItemTablerule = tablerule.builder ( "t_order_item") .ActualTables (arrays.asList ( "t_order_item_0", "t_order_item_1") .tableShardstrategy (new tableShardingstrategy ( "order_id", New ModulotberIthmingmingalshardgorithmerithmerithmerithmerithm ()). .datasourcerule (dataSourcerule) .build (); // 바인딩 테이블 정책, 메인 테이블 전략은 쿼리 할 때 라우팅 된 데이터 소스를 계산하는 데 사용되므로 테이블 정책에 동의하는 테이블의 규칙은 일관성이 있어야하며 특정 범위로 효율성을 향상시킬 수 있습니다. <DindingTablerule> BindingTabrerules = newraylist <bindingTabrerule> (); bindingtablerules.add (new bindingtablerule (arrays.aslist (OrderTablerule, OrderItemTablerule))); return shardingrule.builder () .datasourcerule (dataSourcerule) .tablerules (arrays.aslist (OrderTablerule, OrderItemTablerule)) .BindingTablerules (BindingTablerule) .databaseShardingStrategy (새로운 DatabaseShardStrategy ( "user_id") modulodatabaseShardingAlgorithm ())) .TableShardingStrategy (New TableShardingStrategy ( "Order_id", New ModulotableShardingAlgorithm ()) .Build ();} MyBatisAutoConfiguration이 사용할 샤딩 -JDBC 용 데이터 소스 데이터 소스 작성
@Bean ( "DataSource") Public DataSource ShardingDatasource (Shardingrule Shardingrule) {return shardingdatasourcefactory.createdatasource (Shardingrule);}} 트랜잭션 관리자를 수동으로 구성해야합니다 (이유는 알 수 없습니다)
// 구성 트랜잭션은 수동으로 선언되어야합니다 @BeanPublic DataSourcetRansactionManager TransactionItonManager (@Qualifier ( "DataSource") DataSource DataSource) {return new DataSourcetransactionManager (DataSource);} 라이브러리 파티션 전략의 간단한 구현, 인터페이스 : DatabaseShardingAlgorithm
import java.util.collection; import java.util.linkedhashset; import com.dangdang.ddframe.rdb.sharding.api.shardingvalue; import com.dangdang.dddframe.rdb.sharding.api.strategy.database.singlekeydatabasshardsashardingalgority grampority gormit com.google.common.collect.range;/** * 2017 년 5 월 11 일에 fuwei.deng에 의해 생성되었습니다. */public class modulodatabaseshardingalgorithm은 Single KeydatabaseShardingAlgorithm <long> {@override public <string> databasenames, shardingvalue, shardingvalue <long> shardingvalue <long> 각각 : DatabasEnames) {if (eary.endswith (shardingValue.getValue () % 2 + "")) {각각을 반환합니다. }} 새로운 불법 불법 행정 exception ()을 던지십시오. } @override public collection <string> doinsharding (collection <string> databaseNames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (dataBasenames.size ()); for (long value : shardingValue.getValues ()) {for (string tableName : databasEnames) {if (tableName.endSwith (value % 2 + "")) {result.add (tabename); }} 반환 결과; } @override public collection <string> dobetweensharding (collection <string> databaseNames, shardingValue <long> shardingValue) {collection <string> result = new LinkedHashset <> (databasenames.size ()); 범위 <long> 범위 = (범위 <long>) shardingValue.getValuerange (); for (long i = 범위. }} 반환 결과; }} 테이블 하위 단계 전략의 기본 구현, 인터페이스 : TableShardingAlgorithm
가져 오기 java.util.collection; import java.util.linkedhashset; import com.dangdang.ddframe.rdb.sharding.api.shardingValue; import com.dangdang.dddframe.rdb.sharding.api.strategy.table.singlekeytableShardgorithmm; com.google.common.collect.range;/** * 2017 년 5 월 11 일에 fuwei.deng에 의해 생성 된 */** */public class modulotableshardingalgorithm은 SinglekeyTableShardingAlgorithm <long> {@override public <string <string> tablenames, shardingvalue <long> shardingvalue (shardingvalue)) {if (각. endswith (shardingValue.getValue () % 2 + "")) {각각을 반환합니다. }} 새로운 불법 불법 행정 exception ()을 던지십시오. } @override public collection <string> doinsharding (collection <string> tablenames, shardingvalue <long> shardingValue) {collection <string> result = new LinkedHashset <> (tableNames.size ()); for (long value : shardingValue.getValues ()) {for (string tableName : tableNames) {if (tableName.endSwith (value % 2 + "")) {result.add (tableName); }}} 반환 결과; } @override public collection <string> dobetweensharding (collection <string> tablemenames, shardingValue <Long> ShardingValue) {collection <string> result = new LinkedHashset <> (tableNames.Size ()); 범위 <long> 범위 = (범위 <long>) shardingValue.getValuerange (); for (long i = 범위. }} 반환 결과; }} 이 시점에서 데이터베이스를 나누고 테이블을 나누는 기능이 구현되었습니다.
분리를 읽고 쓰십시오
DataSourcerule을 작성하기 전에 Master 및 Slave Data Source 생성 계층을 추가해야합니다.
// 읽기 쓰기 분리 데이터 소스를 작성하십시오. 읽기 쓰기 분리 데이터 소스는 데이터 소스로 직접 처리 할 수있는 DataSource 인터페이스를 구현합니다. // Mas DataSource MasterSlaveds0 = Mas SlaveDatasource11); // 하위 스토어 데이터 소스 맵 <문자열, dataSource> dataSourcemap = new Hashmap <> (2); dataSourcemap.put ( "ms_0", mas
메인 라이브러리를 사용할 때
Hintmanager hintmanager = hintmanager.getInstance (); hintmanager.setmasterRouteOnly (); // JDBC 작동을 계속합니다
강제 라우팅
Hintmanager hintmanager = hintmanager.getInstance (); hintmanager.addatabaseShardingValue ( "t_order", "user_id", 1l); hintmanager.addtableShardingValue ( "t_order", "Order_id", order.getOrderId ()); hintmanager.addatabaseShardingValue ( "t_order_item", "user_id", 1l); hintmanager.addtableShardingValue ( "t_order_item", "order_id", order.getOrderId ());
업무
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.