springboot2 shardingjdbc4 yml配置单库分表+根据年月份进行分表

文章目录


1.下面已经实现了根据年份月份进行分表,使用的是shardingJDBC ID 生成策略为 SNOWFLAKE
2.自己传ID进来也可以根据ID进行分表
3.要注意配置文件中的每个参数名的配置层级,我在进行配置的时候,就是因为参数层级位置不对的问题弄了一下午
比如:spring下面是shardingsphere 必须严格按照层级问题,重点注意
需要注意如果shardingJDBC要和druid一起使用,那么druid是spring的jar包不是springboot的jar重点注意

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.mayikt</groupId><artifactId>shardingjdbc4</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><sharding-sphere.version>4.1.1</sharding-sphere.version></properties><dependencies><!-- SpringBoot整合Web组件 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- druid数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.11</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- shardingJDBC--><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>${sharding-sphere.version}</version></dependency></dependencies></project>

全部采用YML配置进行数据源的配置
主配置源
application.yml

spring:profiles:active: sharding#日期格式化jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ssdatasource:url: jdbc:mysql://127.0.0.1:3306/tg_project?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTCusername: rootpassword: 123456type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverdruid:initial-size: 5 #初始化大小min-idle: 5 #最小max-active: 100 #最大max-wait: 60000 #连接超时时间##配置间隔多久进行一次检测,检测需要关闭的空闲连接,单位毫秒time-between-eviction-runs-millis: 60000##指定空闲连接最少空闲多久可以被清除min-evictable-idle-time-millis: 30000validation-query: select 'X'##当连接空闲时,是否执行连接测试test-while-idle: true##当从连接池借用连接时,是否测试该连接test-on-borrow: false##当连接归还到连接池时,是否测试该连接test-on-return: false##配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall’ 用于防火墙filters: wall,stat,log4jpool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20max-open-prepared-statements: 20# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.slowSqlMillis=200;druid.stat.logSlowSql=true# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter#是否启用StatFilter默认值trueweb-stat-filter:enabled: trueurl-pattern: /*exclusions: /druid/*,*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.icosession-stat-enable: truesession-stat-max-count: 10# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置#是否启用StatViewServlet默认值truestat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: truelogin-username: adminlogin-password: adminfilter:stat:db-type: mysqllog-slow-sql: trueslow-sql-millis: 5000wall:enabled: truedb-type: mysqlconfig:drop-table-allow: falseresources:static-locations: classpath:/static/**,classpath:/templates/thymeleaf:#prefix:指定模板所在的目录prefix: classpath:templates/suffix: .htmlcheck-template-location: trueencoding: UTF-8content-type: text/htmlmode: HTML5cache: falsemybatis:type-aliases-package: com.taguan.entitymapper-locations: classpath:mapper/*.xmlconfiguration:map-underscore-to-camel-case: trueserver:port: 8080tomcat:uri-encoding: UTF-8max-threads: 1000min-spare-threads: 10
logging:level:com.taguan: debug

application-sharding.yml
shardingJDBC配置,具体配置参数,可以看官网,不做多的介绍,东西太多了

# 数据分片应用于单库分表操作
spring:shardingsphere:datasource:names: db1db1: # 数据库type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/sys-admin?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTCusername: rootpassword: rootsharding:tables:tg_weld_after_rule:# 配置表的分布,表的策略db1.tg_weld_after_rule_$->{2020..2021}0$->{1..9},db1.tg_weld_after_rule_$->{2020..2021}1$->{0..2}actual-data-nodes: db1.tg_weld_after_rule_$->{2021..2021}0$->{1..5}# 指定tg_weld_after_rule_表 主键id 生成策略为 SNOWFLAKEkey-generator:column: idtype: SNOWFLAKE# 指定分片策略table-strategy:
#            inline:
##              约定id值是偶数添加到tg_weld_after_rule_0表,如果id是奇数添加到tg_weld_after_rule_1表
#              sharding-column: id
#              algorithm-expression: tg_weld_after_rule_$->{id%2}standard:#根据年月份进行分表,分表规则自定义handlersharding-column: create_timeprecise-algorithm-class-name: com.taguan.utils.USerTablePreciseShardingAlgorithm#range-algorithm-class-name: com.taguan.utils.MyRangeShardingAlgorithmtg_weld_after_rule_test:# 配置表的分布,表的策略db1.tg_weld_after_rule_$->{2020..2021}0$->{1..9},db1.tg_weld_after_rule_$->{2020..2021}1$->{0..2}actual-data-nodes: db1.tg_weld_after_rule_test_$->{2021..2021}0$->{1..5}# 指定tg_weld_after_rule_表 主键id 生成策略为 SNOWFLAKEkey-generator:column: idtype: SNOWFLAKE# 指定分片策略table-strategy:standard:#根据年月份进行分表,分表规则自定义handlersharding-column: create_timeprecise-algorithm-class-name: com.taguan.utils.USerTablePreciseShardingAlgorithmrange-algorithm-class-name: com.taguan.utils.MyRangeShardingAlgorithmprops:# 打开sql输出日志sql:show: true

分片策略采用
精确分片算法
对应PreciseShardingAlgorithm,用于处理使用单一键作为分片键的=与IN进行分片的场景。需要配合StandardShardingStrategy使用。

具体可以看shardingjdbc官网:https://shardingsphere.apache.org/document/legacy/3.x/document/cn/features/sharding/concept/sharding/
采用精确分片算法 PreciseShardingAlgorithm 可以不使用 范围分片算法 RangeShardingAlgorithm

采用范围分片算 RangeShardingAlgorithm 就必须使用精确分片算法 PreciseShardingAlgorithm

分表分库策略类:
USerTablePreciseShardingAlgorithm

public class USerTablePreciseShardingAlgorithm implements PreciseShardingAlgorithm<Date> {private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");@Overridepublic String doSharding(Collection<String> collection, PreciseShardingValue<Date> preciseShardingValue) {try {String tableName = preciseShardingValue.getLogicTableName();log.info("tableName--------------{}",tableName);String dataTime = formatter.format(preciseShardingValue.getValue());String year = dataTime.substring(0, 4);System.out.println("-------------------------"+year);String key = dataTime.substring(5, 7);System.out.println("-------------------------"+key);return tableName.concat("_").concat(year).concat(key);}catch (Exception e){throw new IllegalArgumentException("没有匹配到库:" + preciseShardingValue.getValue());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

终端安全 | 全面适配国产系统,打造政企合规终端

终端是网络的神经末梢、是数字化业务的生长细胞&#xff0c;它处在网络安全防御的第一线。 针对不同行业用户需求&#xff0c;以及种类繁多的终端架构&#xff0c;亚信安全推出“大终端”一体化安全解决方案&#xff0c;并通过强大的“泛载”与“泛在”能力&#xff0c;为政企…

云原生时代 RocketMQ 运维管控的利器 - RocketMQ Operator

作者 | 刘睿、杜恒 导读&#xff1a;RocketMQ Operator 现已加入 OperatorHub&#xff0c;正式进入 Operator 社区。本文将从实践出发&#xff0c;结合案例来说明&#xff0c;如何通过 RocketMQ Operator 在 Kubernetes 上快速搭建一个 RocketMQ 集群&#xff0c;并提供一些 Ro…

Spring Security BadCredentialsException: Bad credentials问题解决

问题描述&#xff1a; org.springframework.security.authentication.BadCredentialsException: Bad credentials 问题分析&#xff1a; 1、数据库里面的密码没有加密&#xff0c;导致输入正确密码也匹配不上。 解决办法&#xff1a;使用PasswordEncoder先将当前密码加密&…

携程在港挂牌:两次疫情两次上市 穿越周期初心不灭

携程香港联合交易所上市庆祝仪式现场 2021年4月19日9点30分,携程集团正式在香港联合交易所上市&#xff0c;股份代号&#xff1a;9961.hk。这是继2003年在美国纳斯达克上市后&#xff0c;携程在香港的第二次上市。在上海市凌空SOHO携程总部大楼前&#xff0c;8位携程客人代表数…

淘宝直播在智能互动领域的探索及落地

简介&#xff1a; 随着带宽成本的降低和端上算力的提升&#xff0c;在直播、短视频中基于流的互动玩法也将越来越丰富&#xff1b;无论是基于人脸、手势、分割算法的智能化贴纸&#xff0c;还是结合算法的小游戏有了越来越好的舞台&#xff1b;业界短视频和直播主要针对的娱乐性…

使用security 内置密码生成、比较测试案例

public static void main(String[] args) {BCryptPasswordEncoder bCryptPasswordEncoder new BCryptPasswordEncoder();String password bCryptPasswordEncoder.encode("123456");System.out.println("使用security加密后的密码->:"password);System…

基于实时计算Flink的机器学习算法平台及场景介绍

作者&#xff1a;高旸&#xff08;吾与&#xff09;&#xff0c;阿里巴巴高级技术专家 1. 前言 随着互联网“人口红利”的“消耗殆尽”&#xff0c;基于“T1”或者离线计算的机器学习平台及推荐系统转化率与效果日趋“平淡”。后疫情时代的新社会模式及经济形态必将催生出新的…

SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可监控)

简介&#xff1a; 本篇是“SpringCloud 应用在 Kubernetes 上的最佳实践”系列文章的第六篇&#xff0c;主要介绍了如何保障生产环境服务稳定&#xff0c;做到随时发布&#xff0c;从而加快业务的迭代和上线速度。 文&#xff1a;骐羽 前言 在应用发布上线的时候我们最担心的…

mPaaS:全新移动开发平台,只为打造性能更优越的App

简介&#xff1a; 基于移动开发现状与技术演进预判&#xff0c;提供移动开发强力解决方案&#xff0c;洞察 mPaaS 如何帮助企业有效降低技术门槛&#xff0c;减少研发成本&#xff0c;搭建更稳定、更流畅的移动 App。 mPaaS 是源自于支付宝的移动开发平台&#xff0c;为移动开发…

德勤2021技术趋势:繁琐、点状的匠人AI时代将终结,MLOps时代来临

作者 | 宋慧 出品 | CSDN 头图 | 付费下载于视觉中国 德勤在近日发布《2021 年技术趋势》报告&#xff0c;这已经是德勤连续第十二年发布全球技术趋势报告。纵观今年的九大技术趋势&#xff0c;德勤给出的主题关键词是“韧性”&#xff0c;建议企业运用技术实现敏捷发展、构建…

Security RBAC 表结构+权限查询sql

文章目录1. 表结构2. 权限查询sql1. 表结构 /*Navicat Premium Data TransferSource Server : 127.0.0.1Source Server Type : MySQLSource Server Version : 80026Source Host : localhost:3306Source Schema : sys-adminTarget Server Type …

蚂蚁架构师郭援非:分布式数据库是金融机构数字化转型的最佳路径

简介&#xff1a; OceanBase立志于成为世界领先的企业级数据技术解决方案提供商。 2020年8月26-28日&#xff0c;在中科软科技举办的中国财险科技应用高峰论坛上&#xff0c;蚂蚁集团高级解决方案架构师郭援非发表了《OceanBase分布式关系数据库助力保险业务创新》的主题演讲&…

实锤!Python 真没你想的那么简单…

首先我不可否认&#xff0c;Python确实很“火”&#xff01;很多开发者都把它当做主语言或是第二语言。当做主语言原因很好理解&#xff0c;因为最近几年它在人工智能、数据分析、Web开发等众多领域都有着非常成熟的应用。当做第二语言&#xff0c;是因为用它来完成多线程、数据…

jdbcUrl is required with driverClassName错误解决

springboot 升级到2.0之后发现配置多数据源的时候报错&#xff1a; “jdbcUrl is required with driverClassName.”或者Cause: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.] with root cause 主要原因是在1.0 配置数据…

解决 gitlab 因 Prometheus 磁盘占用过大的问题

用 gitlab 搭建的 git 私有服务器&#xff0c;占用空间不断增长&#xff0c;已高达 400G。仔细检查了一下&#xff0c;真正的库数据/var/opt/gitlab/git-data/repositories只有 7 个 G &#xff0c;真正占用空间的是/var/opt/gitlab/prometheus/data&#xff0c;占用了将近 400…

用根因定位法,让运维效率再高一点!

‍‍作者 | 中国农业银行研发中心 王哲头图 | 下载于视觉中国出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;随着业务不断发展&#xff0c;微服务架构越来越受到各大企业的青睐&#xff0c;随之也给传统运维带来更大的挑战&#xff0c;多维KPI指标数量繁多…

零基础开发 nginx 模块

简介&#xff1a; 推荐学习资料: * nginx 开发指南: http://nginx.org/en/docs/dev/development_guide.html * nginx 动态模块编译博客文章: https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/ * nginx 源码: https://github.com/nginx 推荐学习资料: nginx…

勒索病毒如何防治?看阿里云双拳出击不留隐患

简介&#xff1a; 阿里云与合作伙伴Commvault联合发布勒索病毒防治解决方案&#xff0c;从公共云、混合云等场景入手&#xff0c;提供完善的解决方案 在众多的数据安全工作中&#xff0c;勒索病毒的防治是近几年备受关注的领域。从互联网诞生伊始&#xff0c;勒索病毒就相生相…

中国五大移动应用商店携手启动64位安卓生态迁移

为协助中国安卓开发者无缝对接全球64位开发环境&#xff0c;并进一步向终端用户提供最佳体验&#xff0c;中国五大移动应用商店&#xff08;排名不计先后&#xff09;—小米应用商店、OPPO软件商店、vivo应用商店、腾讯应用宝、百度手机助手&#xff0c;于今日共同宣布&#xf…

滴滴基于 Flink 的实时数仓建设实践

随着滴滴业务的高速发展&#xff0c;业务对于数据时效性的需求越来越高&#xff0c;而伴随着实时技术的不断发展和成熟&#xff0c;滴滴也对实时建设做了大量的尝试和实践。本文主要以顺风车这个业务为引子&#xff0c;从引擎侧、平台侧和业务侧各个不同方面&#xff0c;来阐述…