From e38aca8134570513435c003c25dc05f1ae51c9c9 Mon Sep 17 00:00:00 2001
From: yeg <1347747024@qq.com>
Date: 星期四, 08 十月 2026 13:56:28 +0800
Subject: [PATCH] 实现 Ticket04:采集器辅助测量与登记入口,拆除开发模拟器

---
 battery-device-neware/src/main/java/com/battery/device/neware/NewareMysqlAdapter.java |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/battery-device-neware/src/main/java/com/battery/device/neware/NewareMysqlAdapter.java b/battery-device-neware/src/main/java/com/battery/device/neware/NewareMysqlAdapter.java
index d122581..b39bd92 100644
--- a/battery-device-neware/src/main/java/com/battery/device/neware/NewareMysqlAdapter.java
+++ b/battery-device-neware/src/main/java/com/battery/device/neware/NewareMysqlAdapter.java
@@ -67,6 +67,11 @@
     /** 工步层的共用读取窗口:足以覆盖一轮接收里工步与循环的连续调用,又不会压住新出现的工步行。 */
     private static final long CAP_STEP_CACHE_MS = 5000L;
     private static final int SAMPLE_BATCH_LIMIT = 500;
+    /**
+     * 每条语句的查询截止时间。厂商库的服务端**没有**查询超时,客户端不设就是无限;
+     * JDBC URL 里的 {@code socketTimeout} 只管单次读,慢速滴流的查询仍可能长期占住连接。
+     */
+    private static final int QUERY_TIMEOUT_SECONDS = 10;
     private static final Pattern SAFE_TABLE_NAME = Pattern.compile("[A-Za-z0-9_]{1,64}");
     /** 设备时间按适配器时区解释;来源列是秒精度 datetime,小数部分按需接受。 */
     private static final DateTimeFormatter DEVICE_TIME = new DateTimeFormatterBuilder()
@@ -618,6 +623,8 @@
             Connection connection = dataSource.getConnection();
             try (PreparedStatement statement = connection.prepareStatement(sql))
             {
+                // 读取超时有两层:连接串的 socketTimeout 管单次读,这里给整条语句一个截止时间。
+                statement.setQueryTimeout(QUERY_TIMEOUT_SECONDS);
                 for (int index = 0; index < parameters.length; index++)
                     statement.setObject(index + 1, parameters[index]);
                 try (ResultSet rows = statement.executeQuery())

--
Gitblit v1.7.1