mycat创建个性化自定义分片规则

1.先从git上拉取源代码

git地址

2.编写个性化自定义代码

1.在包package io.mycat.route.function创建自定义类
2.继承AbstractPartitionAlgorithm 实现RuleAlgorithm,实现自定义规则

package io.mycat.route.function;

import io.mycat.config.model.rule.RuleAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author kittlen
 * @version 1.0
 * @date 2021/10/29 0029
 */
public class PartitionByKittlenRoute extends AbstractPartitionAlgorithm implements RuleAlgorithm {
    private Logger logger = LoggerFactory.getLogger(PartitionByKittlenRoute.class);

    /**
     * 自定义的参数 需有set方法
     */
    private String myParameter;

    // 分区数量
    private int partitionCount;

    public void setPartitionCount(int partitionCount) {
        this.partitionCount = partitionCount;
    }

    public void setMyParameter(String myParameter) {
        this.myParameter = myParameter;
    }

    /**
     * mycat启动时执行的代码,会加载rule.xml中的参数配置
     */
    @Override
    public void init() {
        logger.info("kittlen Route init");
        logger.info("myParameter :{}", myParameter);
        super.init();
    }

    /**
     * 设置分区数
     *
     * @return
     */
    @Override
    public int getPartitionNum() {
//        return super.getPartitionNum();
        return this.partitionCount;
    }


    /**
     * 自定义分片规则
     *
     * @param columnValue rule.xml中columns设置的sql字段对应的字符
     * @return 返回的值为schema.xml中表定义的dataNode序号 由0开始
     */
    @Override
    public Integer calculate(String columnValue) {
        logger.info("传入的columnValue:{}", columnValue);
        return columnValue.length() % 2;
    }

}

3.编译该java文件为.class文件
本人编译方法为在该项目中创建一个带main方法的文件,调用main,编程软件会将该项目的代码编译成.class文件

3.添加该规则到mycat中

1.将该class复制到mycat目录下lib文件夹里Mycat-server-**-release.jar文件中
使用压缩软件放到io\mycat\route\function目录下
在这里插入图片描述

2.配置rule.xml文件与schema.xml文件
schema.xml:

<table name="t_kittlen_route" primaryKey="id" dataNode="dn1,dn2" rule="kittlen_rule" fetchStoreNodeByJdbc="true"/>

rule.xml:

	<tableRule name="kittlen_rule">
		<rule>
			<columns>id</columns>
			<algorithm>kittlen_rule-base</algorithm>
		</rule>
	</tableRule>
	
		<function name="kittlen_rule-base" class="io.mycat.route.function.PartitionByKittlenRoute">
		 <property name="myParameter">hello</property>
		 <property name="partitionCount">2</property>
	</function>

项目启动
在这里插入图片描述

4.数据添加

CREATE TABLE `t_kittlen_route` (
  `ID` varchar(128) DEFAULT NULL,
  `DB_NAME` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
insert into t_kittlen_route(id,db_name) VALUES ('a',database()),('bb',DATABASE()),('ccc',DATABASE()),('dddd',DATABASE())

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值