shardingsphere自定義分布式主鍵如何配置


先說說初始化過程:
org.apache.shardingsphere.core.yaml.swapper.impl.KeyGeneratorConfigurationYamlSwapper.swap
org.apache.shardingsphere.api.config.sharding.KeyGeneratorConfiguration開始初始化,執行構造方法,里面有三個參數:
public KeyGeneratorConfiguration(String type, String column, Properties properties) {
super(type, properties);
Preconditions.checkArgument(!Strings.isNullOrEmpty(column), "Column is required.");
this.column = column;
}
org.apache.shardingsphere.api.config.TypeBasedSPIConfiguration執行構造方法
org.apache.shardingsphere.core.rule.ShardingRule執行構造方法,這里面初始化很多內容:
    public ShardingRule(ShardingRuleConfiguration shardingRuleConfig, Collection<String> dataSourceNames) {
        Preconditions.checkArgument(!dataSourceNames.isEmpty(), "Data sources cannot be empty.");
        this.shardingRuleConfig = shardingRuleConfig;
        this.shardingDataSourceNames = new ShardingDataSourceNames(shardingRuleConfig, dataSourceNames);
        this.tableRules = this.createTableRules(shardingRuleConfig);
        this.bindingTableRules = this.createBindingTableRules(shardingRuleConfig.getBindingTableGroups());
        this.broadcastTables = shardingRuleConfig.getBroadcastTables();
        this.defaultDatabaseShardingStrategy = this.createDefaultShardingStrategy(shardingRuleConfig.getDefaultDatabaseShardingStrategyConfig());
        this.defaultTableShardingStrategy = this.createDefaultShardingStrategy(shardingRuleConfig.getDefaultTableShardingStrategyConfig());
        this.defaultShardingKeyGenerator = this.createDefaultKeyGenerator(shardingRuleConfig.getDefaultKeyGeneratorConfig());
        this.masterSlaveRules = this.createMasterSlaveRules(shardingRuleConfig.getMasterSlaveRuleConfigs());
        this.shardingEncryptorEngine = this.createShardingEncryptorEngine(shardingRuleConfig.getEncryptRuleConfig());
    }

下面講一下具體的配置方法:

首先按照spi規范,在如下位置創建文件,名稱為:org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator

 

文件里的內容:com.hy.sharding.spi.MySnowflakeShardingKeyGenerator

就是你的自定義類。

配置文件中這樣寫,看最后就可以了。keyGenerator的部分。

tables:
user: #user表
key-generator-column-name: id #主鍵
actualDataNodes: ds0.user$->{[0,1,2]} #數據節點,均勻分布
tableStrategy: #分表策略
inline: #行表達式
shardingColumn: id
algorithmExpression: user$->{id % 3} #按模運算分配
ugroup:
actualDataNodes: ds0.ugroup$->{[0,1,2]}
tableStrategy:
inline:
shardingColumn: uid
algorithmExpression: ugroup$->{uid % 3}
keyGenerator:
type: MYSNOWFLAKE
column: id
props:
workid: 1

 對了,我的版本是

4.0.0-RC1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM