news 2026/4/16 15:51:17

Springboot3 + shardingsphere-jdbc5.5.2 按年月分表(动态创建表)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Springboot3 + shardingsphere-jdbc5.5.2 按年月分表(动态创建表)

1、使用 shardingsphere 动态创建刷新节点

(这个方式 在最新5.3以上的版本已经不支持自定义动态刷新actualDataNodes节点了。

,但是我又不想一次创建所有表(说不定什么时候就会修改表结构)那么该怎么搞呢,我这里提供一个曲线方案。

2、任务创建下一年的表。

原始表用来复制创建

任务类

/** * 开启拉取任务(Bean模式)以年为单位创建 每年最后一天创建下一年的表 */ @XxlJob("createMessageTableJobHandler") public void createMessageTableJobHandler() throws Exception { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy"); String s = format.format(date); // 创建下一年的表 Integer data = Integer.parseInt(s) + 1; // 一次性创建连续两年的表 for (MessageCreatTableEnum value : MessageCreatTableEnum.values()) { StringBuffer name1 = new StringBuffer(value.getCode() + StringPool.UNDERSCORE + data) ; StringBuffer name2= new StringBuffer(value.getCode() + StringPool.UNDERSCORE + (data+1)) ; createTable(value, name1.toString(),name2.toString()); } System.out.println(1); } /** * 创建指定年的分片 * @param value * @param table * @param tableNext */ private void createTable(MessageCreatTableEnum value, String table, String tableNext){ try { Connection connection = dataSource.getConnection(); Statement st = connection.createStatement(); st.setQueryTimeout(10); // 使用st.execute 会卡死 st.executeUpdate 虽然会报错 但是他会执行创建表sql 不影响功能 st.executeUpdate("CREATE TABLE IF NOT EXISTS `" + table + "` LIKE `" + value.getCode() + "`;" + "CREATE TABLE IF NOT EXISTS `" + tableNext + "` LIKE `" + value.getCode() + "`;"); } catch (SQLException e) { log.error(">>>>>>>>>> 这里本来就会抛异常 但是不影响 创建sql执行:{}", e.getMessage(), e); } }

3、sharding-jdbc-dev.yaml 配置

dataSources: master: dataSourceClassName: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://127.0.0.1:3306/sms?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&useSSL=false username: root password: 123456 connectionTimeout: 30000 idleTimeout: 600000 maxLifetime: 1800000 maximumPoolSize: 10 minimumIdle: 5 rules: ### 数据库读写分离配置 - !READWRITE_SPLITTING dataSourceGroups: ### 读写数据库别名 master_ds: writeDataSourceName: master readDataSourceNames: - master transactionalReadQueryStrategy: PRIMARY loadBalancerName: random #负载均衡算法轮询 loadBalancers: random: type: RANDOM #单表配置 - !SINGLE tables: - master_ds.* defaultDataSource: master_ds
- !SHARDING tables: message_data: actualDataNodes: master_ds.message_data_$->{2025..2100} tableStrategy: standard: shardingColumn: create_time shardingAlgorithmName: message_data_year shardingAlgorithms: message_data_year: type: INTERVAL props: datetime-pattern: "yyyy-MM-dd HH:mm:ss" ## 设置分片开始时间 datetime-lower: "2025-01-01 00:00:00" ## 设置分片结束时间 datetime-upper: "2100-12-31 23:59:59" sharding-suffix-pattern: "yyyy" datetime-interval-amount: 1 datetime-interval-unit: YEARS
props: sql-show: true

4、如何命中分片测试(关键点)

由于我们超前配置了分片表(到2100年)但是数据库并没有生成这个些表。每次操作如果没有命中分片字段策略,会检索所有表,报异常。

所以在每次保存 查询操作的时候一定要传递(create_time)字段值。

用来命中分片规则,如果不传递会默认查询原始表。

以mybatis为例

保存必须床底分片字段

查询 设置分片范围 比如id查询为例 除了传递id 还要传递时间 用来命中指定分片。

如果懒可以,直接 lt 当前时间(这个会查询比当前时间小的所有表,查询多次库,性能差点)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:31:21

前端安全问题

1,核心漏洞整改:XSS(跨站脚本攻击)XSS 是前端最频发的漏洞,核心是 “注入恶意脚本并执行”,需从输入过滤、输出编码、执行限制三方面阻断解决 1 表单谁需要转义 2,强制过滤URL参数比如Vue中 不使…

作者头像 李华
网站建设 2026/4/16 12:41:34

【阻塞队列的等待唤醒机制】

阻塞队列的等待唤醒机制Java阻塞队列的等待唤醒机制详解及自定义实现1. 阻塞队列的基本概念2. ArrayBlockingQueue源码剖析(等待唤醒机制)核心字段3. 等待唤醒机制的两种实现方式4. 自定义一个简单阻塞队列5. 常见面试延伸问题总结Java阻塞队列的等待唤醒…

作者头像 李华
网站建设 2026/4/15 21:38:54

高精度霍尔电流传感器价格多少,性价比高么?

高精度霍尔电流传感器作为新能源、工业控制、电力电子等领域的核心监测器件,其价格受精度等级、核心材质、功能配置及应用场景等多重因素影响,差异可达数倍甚至数十倍。本文从价格构成逻辑、性价比评估维度、实用选型策略三方面展开分析,帮助…

作者头像 李华
网站建设 2026/4/11 0:03:56

【YOLO改进】球阀检测与识别:C3k2-GhostDynamicConv优化实践

1. 【YOLO改进】球阀检测与识别:C3k2-GhostDynamicConv优化实践 1.1.1.1. 目录 基本介绍球阀检测技术现状YOLO算法原理与改进思路C3k2-GhostDynamicConv优化详解实验设计与结果分析实际应用场景未来发展方向总结与展望 1.1.1.2. 基本介绍 球阀作为管道系统中的关…

作者头像 李华
网站建设 2026/4/16 14:11:23

光伏离网系统想要玩得溜,蓄电池和电力电子变换器这对CP必须锁死。今天咱们拆解一个典型的220V直流母线架构,看看光伏MPPT和电池充放电怎么在仿真里无缝协作

光伏离网,并联蓄电池。 模型内容: 1.光伏MPPT控制(扰动观察法) 2.蓄电池模型双向DC/DC 3.母线电压外环控制,电流内环控制 仿真结果: 1.光伏电池输出稳定 2.直流母线电压220V稳定 3.蓄电池削峰填谷1. 光伏发…

作者头像 李华
网站建设 2026/4/5 23:23:19

用深度学习生成文本:从LSTM到Transformer的演进与实践

用深度学习生成文本:从LSTM到Transformer的演进与实践 本文我将带你深入了解如何使用循环神经网络(RNN)和Transformer生成序列数据,特别是文本生成。我们将探索这一技术的历史发展、核心原理,并通过完整的代码实现一个…

作者头像 李华