shardingjdbc 5.0.0配置雪花算法及自定义算法id生成

有两种配置方式,一种是使用系统提供的雪花算法,另一种是使用自定义的算法。

第一种:系统雪花算法:

// 系统默认使用雪花算法
userRuleConfiguration.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("ID", "snowflake"));
ShardingRuleConfiguration shardingRuleConfiguration = new ShardingRuleConfiguration();
shardingRuleConfiguration.getTables().add(userRuleConfiguration);

// 内置Snowflake分布式序列算法配置
Properties snowflakeProp = new Properties();
snowflakeProp.setProperty("worker-id", workid);
shardingRuleConfiguration.getKeyGenerators().put("snowflake",
					new ShardingSphereAlgorithmConfiguration("SNOWFLAKE", snowflakeProp));

 需要注意的是,这里的分配算法配置参数"SNOWFLAKE",参数提供workid。

第二种方式是:

// 增加分布式主键
 userRuleConfiuration.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("ID", "mysnowflake"));
ShardingRuleConfiguration shardingRuleConfiguration = new ShardingRuleConfiguration();
shardingRuleConfiguration.getTables().add(userRuleConfiguration);

// 自定义分布式序列算法配置
Properties snowflakeProperties = new Properties();
snowflakeProperties.setProperty("worker-id", workid);
shardingRuleConfiguration.getKeyGenerators().put("mysnowflake",
					new ShardingSphereAlgorithmConfiguration("SHLD_DEVICE_SNOWFLAKE", snowflakeProperties));

实现一个自定义ID生成算法类:

import org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm;

public class SnowflakeKeyGenerator implements KeyGenerateAlgorithm {

	@Override
	public String getType() {
		// 返回算法类型表示
		return "SHLD_DEVICE_SNOWFLAKE";
	}

	@Override
	public void init() {
		// 这里可以进行必要的初始化
	}

	@Override
	public Comparable<?> generateKey() {
		// 这里自定义生成KEY的算法						
		Long lKey = 123456l;
		
		return lKey;
	}
}

具体的算法根据业务需要自定义实现。

最后还需要添加一个SPI配置,resource下面的META-INF/services生成一个文件org.apache.shardingsphere.sharding.spi.KeyGenerateAlgorithm,配置算法类的全路径。

com.demo.cloudshield.server.config.SnowflakeKeyGenerator

这样就可以用于分布式id生成了。


版权声明:本文为liaomingwu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。