sharding-sphere 3.1.0 的简单使用
2019-08-26 06:22:52来源:博客园 阅读 ()
sharding-sphere 3.1.0 的简单使用
最开始倒腾sharding-sphere的时候,在网上找了半天,下了源码看了半天(想用@Configuration 注解的方式,而不是去写配置文件,我觉得配置文件太多了,弄的晃眼),也没有弄明白个所以然。
后面直接在官网找到了比较齐全的答案,我最开始还以为必须要配置配置文件啥的,其实完全不需要。
这个是官网地址:https://shardingsphere.apache.org/document/current/cn/manual/sharding-jdbc/configuration/config-java/
下面这个是我们系统的一些配置:由于我们系统小,所以只用到了分表,没有用到分库和分片和主从,但是配置这些也很容易。
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 。
原文链接:https://www.cnblogs.com/wucaifang/p/11394446.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Linux简单命令的学习 2020-06-10
- 因为命名被diss无数次。简单聊聊编程最头疼的事情之一:命名 2020-06-10
- 「starter推荐」简单高效Excel 导出工具 2020-06-08
- Mybaties简单实例测试及注意问题 2020-06-07
- 天哪!手动编写mybatis雏形竟然这么简单 2020-06-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash