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;
}
}