sharding-sphere 3.1.0 的简单使用
程序员文章站
2023-11-13 09:27:28
最开始倒腾sharding-sphere的时候,在网上找了半天,下了源码看了半天(想用@Configuration 注解的方式,而不是去写配置文件,我觉得配置文件太多了,弄的晃眼),也没有弄明白个所以然。 后面直接在官网找到了比较齐全的答案,我最开始还以为必须要配置配置文件啥的,其实完全不需要。 这 ......
最开始倒腾sharding-sphere的时候,在网上找了半天,下了源码看了半天(想用@configuration 注解的方式,而不是去写配置文件,我觉得配置文件太多了,弄的晃眼),也没有弄明白个所以然。
后面直接在官网找到了比较齐全的答案,我最开始还以为必须要配置配置文件啥的,其实完全不需要。
这个是官网地址:
下面这个是我们系统的一些配置:由于我们系统小,所以只用到了分表,没有用到分库和分片和主从,但是配置这些也很容易。
import java.sql.sqlexception; import java.util.hashmap; import java.util.map; import java.util.properties; import java.util.concurrent.concurrenthashmap; import javax.sql.datasource; import org.springframework.beans.factory.annotation.autowired; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.context.annotation.primary; import com.oftoo.datasource.config.dynamicdatasource; import com.oftoo.datasource.database.ipkeygenerator; import com.oftoo.datasource.database.timeshardingtablealgorithm; import io.shardingsphere.api.config.rule.shardingruleconfiguration; import io.shardingsphere.api.config.rule.tableruleconfiguration; import io.shardingsphere.api.config.strategy.standardshardingstrategyconfiguration; import io.shardingsphere.shardingjdbc.api.shardingdatasourcefactory; @configuration public class datasourceconfig { @autowired dynamicdatasource datasource; @bean(name = "shardingdatasource") @primary datasource getshardingdatasource() throws sqlexception { shardingruleconfiguration shardingruleconfig = new shardingruleconfiguration(); shardingruleconfig.gettableruleconfigs().add(gettesttableruleconfiguration()); // 如果有多个表,可以用逗号“,”分隔 ,比如user_info, //shardingruleconfig.gettableruleconfigs().add(getterminalrecordtableruleconfiguration()); shardingruleconfig.getbindingtablegroups().add("tb_user,t_terminal_record"); // 设置分片策略,自定义算法来实现分片规则 //shardingruleconfig.setdefaultdatabaseshardingstrategyconfig(new // standardshardingstrategyconfiguration("user_id", new demodatabaseshardingalgorithm())); shardingruleconfig.setdefaulttableshardingstrategyconfig(// new standardshardingstrategyconfiguration("user_id", new timeshardingtablealgorithm())); return shardingdatasourcefactory.createdatasource(createdatasourcemap(), shardingruleconfig, // new concurrenthashmap(), new properties()); } /** * 配置表规则 * * @return */ tableruleconfiguration gettesttableruleconfiguration() { tableruleconfiguration test = new tableruleconfiguration(); // 配置表名 test.setlogictable("tb_user"); // 配置真实的数据节点,即数据库中真实存在的节点,由数据源名 + 表名组成 test.setactualdatanodes("ds_0.tb_user_${0..1}");// user_${0..1}分库,user_info_${0..1}分表 // 主键生成列,默认的主键生成算法是snowflake test.setkeygeneratorcolumnname("user_id"); ipkeygenerator.initworkerid(); return test; } /** * 创建数据源 * * @return */ private map<string, datasource> createdatasourcemap() { map<string, datasource> result = new hashmap<>(); result.put("ds_0", datasource); return result; } }
maven:
<dependency> <groupid>io.shardingsphere</groupid> <artifactid>sharding-jdbc-core</artifactid> <version>3.1.0</version> </dependency>
timeshardingtablealgorithm这个类我复制的另外一个人写的,
paraseshardingkeytool.getyearandmonth(shardingvalue.getvalue())这个只是获取到了日期如:201808(这个就是表名)
import java.util.collection; import com.oftoo.common.utils.paraseshardingkeytool; import io.shardingsphere.api.algorithm.sharding.preciseshardingvalue; import io.shardingsphere.api.algorithm.sharding.standard.preciseshardingalgorithm; public class timeshardingtablealgorithm implements preciseshardingalgorithm<long> { @override public string dosharding(collection<string> availabletargetnames, preciseshardingvalue<long> shardingvalue) { stringbuffer tablename = new stringbuffer(); tablename.append(shardingvalue.getlogictablename()).append("_").append(paraseshardingkeytool.getyearandmonth(shardingvalue.getvalue())); return tablename.tostring(); } }
这个是我数据库的表名,里面的字段很简单,就一个user_id 和name,我们这边用的是spring +mybatis 。
上一篇: 预定安卓最强处理器?Exynos 1000跑分超骁龙875
下一篇: 机器人创业会是一门好生意吗?