Browse Source

spring-boot-demo-sharding-jdbc 完成

pull/1/head
Yangkai.Shen 5 years ago
parent
commit
ecfac23b11
3 changed files with 89 additions and 4 deletions
  1. +46
    -2
      spring-boot-demo-sharding-jdbc/README.md
  2. +30
    -0
      spring-boot-demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/config/CustomSnowflakeKeyGenerator.java
  3. +13
    -2
      spring-boot-demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/config/DataSourceShardingConfig.java

+ 46
- 2
spring-boot-demo-sharding-jdbc/README.md View File

@@ -97,7 +97,42 @@
</project> </project>
``` ```


### 2.2. `DataSourceShardingConfig.java`
### 2.2. `CustomSnowflakeKeyGenerator.java`

```java
package com.xkcoding.sharding.jdbc.config;

import cn.hutool.core.lang.Snowflake;
import io.shardingsphere.core.keygen.KeyGenerator;

/**
* <p>
* 自定义雪花算法,替换 DefaultKeyGenerator,避免DefaultKeyGenerator生成的id大几率是偶数
* </p>
*
* @package: com.xkcoding.sharding.jdbc.config
* @description: 自定义雪花算法,替换 DefaultKeyGenerator,避免DefaultKeyGenerator生成的id大几率是偶数
* @author: yangkai.shen
* @date: Created in 2019-03-26 17:07
* @copyright: Copyright (c) 2019
* @version: V1.0
* @modified: yangkai.shen
*/
public class CustomSnowflakeKeyGenerator implements KeyGenerator {
private Snowflake snowflake;

public CustomSnowflakeKeyGenerator(Snowflake snowflake) {
this.snowflake = snowflake;
}
@Override
public Number generateKey() {
return snowflake.nextId();
}
}
```

### 2.3. `DataSourceShardingConfig.java`


```java ```java
/** /**
@@ -115,6 +150,8 @@
*/ */
@Configuration @Configuration
public class DataSourceShardingConfig { public class DataSourceShardingConfig {
private static final Snowflake snowflake = IdUtil.createSnowflake(1, 1);

/** /**
* 需要手动配置事务管理器 * 需要手动配置事务管理器
*/ */
@@ -149,7 +186,7 @@ public class DataSourceShardingConfig {
// ds${0..1}.t_order_${0..2} 也可以写成 ds$->{0..1}.t_order_$->{0..1} // ds${0..1}.t_order_${0..2} 也可以写成 ds$->{0..1}.t_order_$->{0..1}
tableRule.setActualDataNodes("ds${0..1}.t_order_${0..2}"); tableRule.setActualDataNodes("ds${0..1}.t_order_${0..2}");
tableRule.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_$->{order_id % 3}")); tableRule.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_$->{order_id % 3}"));
tableRule.setKeyGenerator(new DefaultKeyGenerator());
tableRule.setKeyGenerator(customKeyGenerator());
tableRule.setKeyGeneratorColumnName("order_id"); tableRule.setKeyGeneratorColumnName("order_id");
return tableRule; return tableRule;
} }
@@ -176,6 +213,13 @@ public class DataSourceShardingConfig {
return dataSourceMap; return dataSourceMap;
} }


/**
* 自定义主键生成器
*/
private KeyGenerator customKeyGenerator() {
return new CustomSnowflakeKeyGenerator(snowflake);
}

} }
``` ```




+ 30
- 0
spring-boot-demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/config/CustomSnowflakeKeyGenerator.java View File

@@ -0,0 +1,30 @@
package com.xkcoding.sharding.jdbc.config;

import cn.hutool.core.lang.Snowflake;
import io.shardingsphere.core.keygen.KeyGenerator;

/**
* <p>
* 自定义雪花算法,替换 DefaultKeyGenerator,避免DefaultKeyGenerator生成的id大几率是偶数
* </p>
*
* @package: com.xkcoding.sharding.jdbc.config
* @description: 自定义雪花算法,替换 DefaultKeyGenerator,避免DefaultKeyGenerator生成的id大几率是偶数
* @author: yangkai.shen
* @date: Created in 2019-03-26 17:07
* @copyright: Copyright (c) 2019
* @version: V1.0
* @modified: yangkai.shen
*/
public class CustomSnowflakeKeyGenerator implements KeyGenerator {
private Snowflake snowflake;

public CustomSnowflakeKeyGenerator(Snowflake snowflake) {
this.snowflake = snowflake;
}

@Override
public Number generateKey() {
return snowflake.nextId();
}
}

+ 13
- 2
spring-boot-demo-sharding-jdbc/src/main/java/com/xkcoding/sharding/jdbc/config/DataSourceShardingConfig.java View File

@@ -1,11 +1,13 @@
package com.xkcoding.sharding.jdbc.config; package com.xkcoding.sharding.jdbc.config;


import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import com.zaxxer.hikari.HikariDataSource; import com.zaxxer.hikari.HikariDataSource;
import io.shardingsphere.api.config.rule.ShardingRuleConfiguration; import io.shardingsphere.api.config.rule.ShardingRuleConfiguration;
import io.shardingsphere.api.config.rule.TableRuleConfiguration; import io.shardingsphere.api.config.rule.TableRuleConfiguration;
import io.shardingsphere.api.config.strategy.InlineShardingStrategyConfiguration; import io.shardingsphere.api.config.strategy.InlineShardingStrategyConfiguration;
import io.shardingsphere.api.config.strategy.NoneShardingStrategyConfiguration; import io.shardingsphere.api.config.strategy.NoneShardingStrategyConfiguration;
import io.shardingsphere.core.keygen.DefaultKeyGenerator;
import io.shardingsphere.core.keygen.KeyGenerator;
import io.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory; import io.shardingsphere.shardingjdbc.api.ShardingDataSourceFactory;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@@ -35,6 +37,8 @@ import java.util.concurrent.ConcurrentHashMap;
*/ */
@Configuration @Configuration
public class DataSourceShardingConfig { public class DataSourceShardingConfig {
private static final Snowflake snowflake = IdUtil.createSnowflake(1, 1);

/** /**
* 需要手动配置事务管理器 * 需要手动配置事务管理器
*/ */
@@ -69,7 +73,7 @@ public class DataSourceShardingConfig {
// ds${0..1}.t_order_${0..2} 也可以写成 ds$->{0..1}.t_order_$->{0..1} // ds${0..1}.t_order_${0..2} 也可以写成 ds$->{0..1}.t_order_$->{0..1}
tableRule.setActualDataNodes("ds${0..1}.t_order_${0..2}"); tableRule.setActualDataNodes("ds${0..1}.t_order_${0..2}");
tableRule.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_$->{order_id % 3}")); tableRule.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_$->{order_id % 3}"));
tableRule.setKeyGenerator(new DefaultKeyGenerator());
tableRule.setKeyGenerator(customKeyGenerator());
tableRule.setKeyGeneratorColumnName("order_id"); tableRule.setKeyGeneratorColumnName("order_id");
return tableRule; return tableRule;
} }
@@ -96,4 +100,11 @@ public class DataSourceShardingConfig {
return dataSourceMap; return dataSourceMap;
} }


/**
* 自定义主键生成器
*/
private KeyGenerator customKeyGenerator() {
return new CustomSnowflakeKeyGenerator(snowflake);
}

} }

Loading…
Cancel
Save