shardingsphere-proxy5.3.1复合分片算法的问题

shardingsphere-proxy5.3.1复合分片算法的问题

基于Maven的复合分片算法,打成jar包,上传到ext-lib文件夹,启动sharidngsphere运行报错:Receiver class com.mysql.sharding.proxy.complex.OrderTableComplex does not define or inherit an implementation of the resolved method ‘abstract void init(java.util.Properties)’ of interface org.apache.shardingsphere.infra.util.spi.lifecycle.SPIPostProcessor.
报错信息类未实现接口,但是程序中类实现了接口
在这里插入图片描述
有没有会的求解

package com.mysql.sharding.proxy.complex;

import com.mysql.sharding.proxy.util.ComplexStringUtils;
import org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingAlgorithm;
import org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingValue;

import java.util.*;

/**
 * @author linzf
 * @since 2021-11-21
 * 类描述: 复合分片算法
 */
public class OrderTableComplex implements ComplexKeysShardingAlgorithm<Long> {

    private Properties props = new Properties();

    /**
     * 功能描述: 实现分片的具体实现,数据库根据用户ID和订单ID来实现分片,
     * 意味着只要某张表中应用了这个复合分片算法,然后字段里面有包含用户ID
     * 和订单ID的SQL那就会实现数据库的分片。
     *
     * @param collection
     * @param complexKeysShardingValue
     * @return
     */
    @Override
    public Collection<String> doSharding(Collection<String> collection, ComplexKeysShardingValue<Long> complexKeysShardingValue) {
        List<String> shardingList = new ArrayList();
        // 获取当前的表名
        String logicTableName = complexKeysShardingValue.getLogicTableName();
        // 获取请求参数
        Map<String, Collection<Long>> columnNameAndShardingValuesMap = complexKeysShardingValue.getColumnNameAndShardingValuesMap();
        List IdList = (List) columnNameAndShardingValuesMap.get("id");
        List kList = (List) columnNameAndShardingValuesMap.get("k");
        List cList=(List)columnNameAndShardingValuesMap.get("c");
        List padList=(List)columnNameAndShardingValuesMap.get("pad");
        Long id = IdList != null ? ComplexStringUtils.getObjLong(IdList.get(0)) : 0L;
        Long k = kList != null ? ComplexStringUtils.getObjLong(kList.get(0)) : 0L;
        String c=cList != null ? ComplexStringUtils.getObjStr(cList.get(0)) : null;
        String pad=padList != null ? ComplexStringUtils.getObjStr(padList.get(0)) : null;
        Long modVal = 0L;
        /**
         * 分片规则:id、k为数字,c、pad为字符串,需要进行混合分片,分片规则如下:
         * 1、求和值为MAX=(id+k+c的ASCII值+pad的ASCII值)
         * 2、对和取余进行分表
         */

        Long MAX=(id+k+Integer.valueOf(String.valueOf(cList))+Integer.valueOf(String.valueOf(padList)));
        modVal=MAX%10;
        for (Iterator<String> iter = collection.iterator(); iter.hasNext(); ) {
            String str = iter.next();
            if ((logicTableName + modVal).equals(str)) {
                shardingList.add(str);
            }
        }
        return shardingList;
    }

    /**
     * 初始化当前对象的时候调用的方法
     */
    @Override
    public void init() {

    }

    /**
     * 功能描述: 对应sharding-algorithms配置里面的type属性里面配置的值
     *
     * @return
     */
    @Override
    public String getType() {
        return "OrderTableComplex";
    }

    @Override
    public Properties getProps() {
        return this.props;
    }

    /**
     * 功能描述: 获取application.yml中的当前分片算法的配置信息
     *
     * @param properties application.yml中的当前分片算法的配置信息
     */
    @Override
    public void setProps(Properties properties) {
        this.props = properties;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小白的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值