diff --git a/backend/src/main/resources/application-docker.yml b/backend/src/main/resources/application-docker.yml
deleted file mode 100644
index b057764..0000000
--- a/backend/src/main/resources/application-docker.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-# Docker环境配置
-spring:
- # 数据源配置 - Docker环境
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://mysql:3306/agricultural_stock?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
- username: root
- password: 123456
- hikari:
- minimum-idle: 10
- maximum-pool-size: 30
- connection-timeout: 30000
- idle-timeout: 600000
- max-lifetime: 1800000
-
- # Redis配置 - Docker环境
- redis:
- host: redis
- port: 6379
- database: 0
- timeout: 6000ms
- lettuce:
- pool:
- max-active: 20
- max-wait: -1ms
- max-idle: 10
- min-idle: 2
-
- # JPA配置
- jpa:
- hibernate:
- ddl-auto: none
- show-sql: false # 生产环境不显示SQL
- database-platform: org.hibernate.dialect.MySQL8Dialect
- properties:
- hibernate:
- dialect: org.hibernate.dialect.MySQL8Dialect
- format_sql: false
-
-# 日志配置 - Docker环境
-logging:
- level:
- com.agricultural.stock: INFO
- org.springframework: WARN
- com.baomidou.mybatisplus: WARN
- pattern:
- console: "%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
- file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"
- file:
- name: logs/agricultural-stock-platform.log
\ No newline at end of file
diff --git a/data-collector/config.ini b/data-collector/config.ini
index 965c005..292f094 100644
--- a/data-collector/config.ini
+++ b/data-collector/config.ini
@@ -11,7 +11,7 @@ batch_size = 100
max_retries = 3
request_timeout = 10
# 添加交易时间配置
-trading_hours = 09:30-11:30,13:00-15:00
+trading_hours = 09:30-12:00,13:00-17:00
trading_days = 1,2,3,4,5 # 周一到周五
[logging]
diff --git a/data-collector/stock_crawler.log b/data-collector/stock_crawler.log
index 4125352..1de274e 100644
--- a/data-collector/stock_crawler.log
+++ b/data-collector/stock_crawler.log
@@ -1063,3 +1063,315 @@
2025-06-23 09:38:44,394 - INFO - 数据采集完成,共处理 67 只股票
2025-06-23 09:39:03,934 - INFO - 收到停止信号,正在关闭...
2025-06-23 09:39:03,935 - INFO - 股票数据采集器已停止
+2025-06-24 08:52:19,034 - ERROR - 数据库连接失败: 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
+2025-06-24 08:52:19,036 - INFO - 股票数据采集器启动
+2025-06-24 08:52:19,036 - INFO - 定时任务已启动,每 5 分钟采集一次
+2025-06-24 08:52:19,037 - INFO - 当前非交易时间,跳过数据采集
+2025-06-24 08:52:52,940 - INFO - 收到停止信号,正在关闭...
+2025-06-24 08:52:52,940 - INFO - 股票数据采集器已停止
+2025-06-24 08:52:58,739 - ERROR - 数据库连接失败: 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)
+2025-06-24 08:52:58,740 - INFO - 股票数据采集器启动
+2025-06-24 08:52:58,741 - INFO - 定时任务已启动,每 30 分钟采集一次
+2025-06-24 08:52:58,741 - INFO - 当前非交易时间,跳过数据采集
+2025-06-24 08:53:42,193 - INFO - 收到停止信号,正在关闭...
+2025-06-24 08:53:42,193 - INFO - 股票数据采集器已停止
+2025-06-24 08:53:43,869 - INFO - 数据库连接成功
+2025-06-24 08:53:43,870 - INFO - 股票数据采集器启动
+2025-06-24 08:53:43,870 - INFO - 定时任务已启动,每 30 分钟采集一次
+2025-06-24 08:53:43,871 - INFO - 当前非交易时间,跳过数据采集
+2025-06-24 08:54:55,977 - INFO - 收到停止信号,正在关闭...
+2025-06-24 08:54:55,978 - INFO - 股票数据采集器已停止
+2025-06-24 11:43:07,755 - INFO - 数据库连接成功
+2025-06-24 11:43:07,756 - INFO - 股票数据采集器启动
+2025-06-24 11:43:07,756 - INFO - 定时任务已启动,每 5 分钟采集一次
+2025-06-24 11:43:07,757 - INFO - 当前非交易时间,跳过数据采集
+2025-06-24 11:43:27,094 - INFO - 收到停止信号,正在关闭...
+2025-06-24 11:43:27,095 - INFO - 股票数据采集器已停止
+2025-06-24 11:43:29,105 - INFO - 数据库连接成功
+2025-06-24 11:43:29,105 - INFO - 股票数据采集器启动
+2025-06-24 11:43:29,105 - INFO - 定时任务已启动,每 5 分钟采集一次
+2025-06-24 11:43:29,106 - INFO - 当前非交易时间,跳过数据采集
+2025-06-24 11:43:54,286 - INFO - 收到停止信号,正在关闭...
+2025-06-24 11:43:54,286 - INFO - 股票数据采集器已停止
+2025-06-24 11:43:56,006 - INFO - 数据库连接成功
+2025-06-24 11:43:56,006 - INFO - 股票数据采集器启动
+2025-06-24 11:43:56,007 - INFO - 定时任务已启动,每 5 分钟采集一次
+2025-06-24 11:43:56,007 - INFO - 开始执行股票数据采集...
+2025-06-24 11:43:56,122 - INFO - 成功获取股票 sz300189 数据: 神农种业
+2025-06-24 11:43:56,670 - INFO - 成功获取股票 sz000713 数据: 丰乐种业
+2025-06-24 11:43:57,217 - INFO - 成功获取股票 sh600313 数据: 农发种业
+2025-06-24 11:43:57,763 - INFO - 成功获取股票 bj837403 数据: 康农种业
+2025-06-24 11:43:58,311 - INFO - 成功获取股票 sz200505 数据: 京粮B
+2025-06-24 11:43:58,859 - INFO - 成功获取股票 sz300268 数据: *ST佳沃
+2025-06-24 11:43:59,407 - INFO - 成功获取股票 sz000930 数据: 中粮科技
+2025-06-24 11:43:59,954 - INFO - 成功获取股票 sz002299 数据: 圣农发展
+2025-06-24 11:44:00,503 - INFO - 成功获取股票 sh600371 数据: 万向德农
+2025-06-24 11:44:01,049 - INFO - 成功获取股票 sh600598 数据: 北大荒
+2025-06-24 11:44:01,596 - INFO - 成功获取股票 sh603609 数据: 禾丰股份
+2025-06-24 11:44:02,143 - INFO - 成功获取股票 bj831087 数据: 秋乐种业
+2025-06-24 11:44:02,690 - INFO - 成功获取股票 sh603363 数据: 傲农生物
+2025-06-24 11:44:03,236 - INFO - 成功获取股票 sh603336 数据: 宏辉果蔬
+2025-06-24 11:44:03,783 - INFO - 成功获取股票 sh600354 数据: 敦煌种业
+2025-06-24 11:44:04,330 - INFO - 成功获取股票 sz002385 数据: 大北农
+2025-06-24 11:44:04,877 - INFO - 成功获取股票 sz000048 数据: 京基智农
+2025-06-24 11:44:05,423 - INFO - 成功获取股票 sh600251 数据: 冠农股份
+2025-06-24 11:44:05,971 - INFO - 成功获取股票 sz002321 数据: 华英农业
+2025-06-24 11:44:06,517 - INFO - 成功获取股票 sz000505 数据: 京粮控股
+2025-06-24 11:44:07,063 - INFO - 成功获取股票 sz001366 数据: 播恩集团
+2025-06-24 11:44:07,609 - INFO - 成功获取股票 sz002772 数据: 众兴菌业
+2025-06-24 11:44:08,156 - INFO - 成功获取股票 sz002041 数据: 登海种业
+2025-06-24 11:44:08,703 - INFO - 成功获取股票 sh600127 数据: 金健米业
+2025-06-24 11:44:09,251 - INFO - 成功获取股票 sz002548 数据: 金新农
+2025-06-24 11:44:09,799 - INFO - 成功获取股票 sh605296 数据: 神农集团
+2025-06-24 11:44:10,345 - INFO - 成功获取股票 sh600359 数据: 新农开发
+2025-06-24 11:44:10,893 - INFO - 成功获取股票 sh601952 数据: 苏垦农发
+2025-06-24 11:44:11,440 - INFO - 成功获取股票 sh600975 数据: 新五丰
+2025-06-24 11:44:11,987 - INFO - 成功获取股票 sz300505 数据: 川金诺
+2025-06-24 11:44:12,534 - INFO - 成功获取股票 sh600141 数据: 兴发集团
+2025-06-24 11:44:13,081 - INFO - 成功获取股票 sz000893 数据: 亚钾国际
+2025-06-24 11:44:13,627 - INFO - 成功获取股票 sh600691 数据: 阳煤化工
+2025-06-24 11:44:14,173 - INFO - 成功获取股票 sh600470 数据: 六国化工
+2025-06-24 11:44:14,720 - INFO - 成功获取股票 sz000408 数据: 藏格矿业
+2025-06-24 11:44:15,267 - INFO - 成功获取股票 sz000902 数据: 新洋丰
+2025-06-24 11:44:15,815 - INFO - 成功获取股票 sz002539 数据: 云图控股
+2025-06-24 11:44:16,362 - INFO - 成功获取股票 sz002599 数据: 盛通股份
+2025-06-24 11:44:16,909 - INFO - 成功获取股票 sz002545 数据: 东方铁塔
+2025-06-24 11:44:17,457 - INFO - 成功获取股票 sz300387 数据: 富邦科技
+2025-06-24 11:44:18,004 - INFO - 成功获取股票 sz002274 数据: 华昌化工
+2025-06-24 11:44:18,552 - INFO - 成功获取股票 sz002470 数据: 金正大
+2025-06-24 11:44:19,099 - INFO - 成功获取股票 sz002538 数据: 司尔特
+2025-06-24 11:44:19,647 - INFO - 成功获取股票 sz000731 数据: 四川美丰
+2025-06-24 11:44:20,195 - INFO - 成功获取股票 sh600078 数据: 澄星股份
+2025-06-24 11:44:20,743 - INFO - 成功获取股票 sh600227 数据: 赤天化
+2025-06-24 11:44:21,290 - INFO - 成功获取股票 sh603395 数据: 红四方
+2025-06-24 11:44:21,839 - INFO - 成功获取股票 sz002588 数据: 史丹利
+2025-06-24 11:44:22,387 - INFO - 成功获取股票 sz000422 数据: 湖北宜化
+2025-06-24 11:44:22,933 - INFO - 成功获取股票 sz002556 数据: 辉隆股份
+2025-06-24 11:44:23,480 - INFO - 成功获取股票 sz002312 数据: 川发龙蟒
+2025-06-24 11:44:24,028 - INFO - 成功获取股票 sz002170 数据: 芭田股份
+2025-06-24 11:44:24,575 - INFO - 成功获取股票 sz000792 数据: 盐湖股份
+2025-06-24 11:44:25,122 - INFO - 成功获取股票 sh600096 数据: 云天化
+2025-06-24 11:44:25,714 - INFO - 成功获取股票 sz001231 数据: 农心科技
+2025-06-24 11:44:26,262 - INFO - 成功获取股票 sz002731 数据: 萃华珠宝
+2025-06-24 11:44:26,809 - INFO - 成功获取股票 sz200553 数据: 安道麦B
+2025-06-24 11:44:27,355 - INFO - 成功获取股票 sh603810 数据: 丰山集团
+2025-06-24 11:44:27,904 - INFO - 成功获取股票 sh603970 数据: 中农立华
+2025-06-24 11:44:28,456 - INFO - 成功获取股票 sz301035 数据: 润丰股份
+2025-06-24 11:44:29,002 - INFO - 成功获取股票 sz002868 数据: *ST绿康
+2025-06-24 11:44:29,549 - INFO - 成功获取股票 sz003042 数据: 中农联合
+2025-06-24 11:44:30,096 - INFO - 成功获取股票 sz002391 数据: 长青股份
+2025-06-24 11:44:30,644 - INFO - 成功获取股票 bj870866 数据: 绿亨科技
+2025-06-24 11:44:31,192 - INFO - 成功获取股票 sz301665 数据: 泰禾股份
+2025-06-24 11:44:31,738 - INFO - 成功获取股票 sh600486 数据: 扬农化工
+2025-06-24 11:44:32,239 - INFO - 本次采集完成,共获取 66 只股票数据
+2025-06-24 11:44:32,277 - INFO - 插入股票 sz300189 数据
+2025-06-24 11:44:32,279 - INFO - 插入股票 sz000713 数据
+2025-06-24 11:44:32,281 - INFO - 插入股票 sh600313 数据
+2025-06-24 11:44:32,283 - INFO - 插入股票 bj837403 数据
+2025-06-24 11:44:32,286 - INFO - 插入股票 sz200505 数据
+2025-06-24 11:44:32,290 - INFO - 插入股票 sz300268 数据
+2025-06-24 11:44:32,293 - INFO - 插入股票 sz000930 数据
+2025-06-24 11:44:32,294 - INFO - 插入股票 sz002299 数据
+2025-06-24 11:44:32,296 - INFO - 插入股票 sh600371 数据
+2025-06-24 11:44:32,298 - INFO - 插入股票 sh600598 数据
+2025-06-24 11:44:32,300 - INFO - 插入股票 sh603609 数据
+2025-06-24 11:44:32,303 - INFO - 插入股票 bj831087 数据
+2025-06-24 11:44:32,305 - INFO - 插入股票 sh603363 数据
+2025-06-24 11:44:32,307 - INFO - 插入股票 sh603336 数据
+2025-06-24 11:44:32,309 - INFO - 插入股票 sh600354 数据
+2025-06-24 11:44:32,311 - INFO - 插入股票 sz002385 数据
+2025-06-24 11:44:32,312 - INFO - 插入股票 sz000048 数据
+2025-06-24 11:44:32,314 - INFO - 插入股票 sh600251 数据
+2025-06-24 11:44:32,317 - INFO - 插入股票 sz002321 数据
+2025-06-24 11:44:32,319 - INFO - 插入股票 sz000505 数据
+2025-06-24 11:44:32,323 - INFO - 插入股票 sz001366 数据
+2025-06-24 11:44:32,324 - INFO - 插入股票 sz002772 数据
+2025-06-24 11:44:32,326 - INFO - 插入股票 sz002041 数据
+2025-06-24 11:44:32,333 - INFO - 插入股票 sh600127 数据
+2025-06-24 11:44:32,336 - INFO - 插入股票 sz002548 数据
+2025-06-24 11:44:32,338 - INFO - 插入股票 sh605296 数据
+2025-06-24 11:44:32,340 - INFO - 插入股票 sh600359 数据
+2025-06-24 11:44:32,342 - INFO - 插入股票 sh601952 数据
+2025-06-24 11:44:32,344 - INFO - 插入股票 sh600975 数据
+2025-06-24 11:44:32,347 - INFO - 插入股票 sz300505 数据
+2025-06-24 11:44:32,349 - INFO - 插入股票 sh600141 数据
+2025-06-24 11:44:32,372 - INFO - 插入股票 sz000893 数据
+2025-06-24 11:44:32,374 - INFO - 插入股票 sh600691 数据
+2025-06-24 11:44:32,376 - INFO - 插入股票 sh600470 数据
+2025-06-24 11:44:32,378 - INFO - 插入股票 sz000408 数据
+2025-06-24 11:44:32,381 - INFO - 插入股票 sz000902 数据
+2025-06-24 11:44:32,383 - INFO - 插入股票 sz002539 数据
+2025-06-24 11:44:32,385 - INFO - 插入股票 sz002599 数据
+2025-06-24 11:44:32,388 - INFO - 插入股票 sz002545 数据
+2025-06-24 11:44:32,390 - INFO - 插入股票 sz300387 数据
+2025-06-24 11:44:32,393 - INFO - 插入股票 sz002274 数据
+2025-06-24 11:44:32,395 - INFO - 插入股票 sz002470 数据
+2025-06-24 11:44:32,398 - INFO - 插入股票 sz002538 数据
+2025-06-24 11:44:32,400 - INFO - 插入股票 sz000731 数据
+2025-06-24 11:44:32,402 - INFO - 插入股票 sh600078 数据
+2025-06-24 11:44:32,404 - INFO - 插入股票 sh600227 数据
+2025-06-24 11:44:32,405 - INFO - 插入股票 sh603395 数据
+2025-06-24 11:44:32,407 - INFO - 插入股票 sz002588 数据
+2025-06-24 11:44:32,409 - INFO - 插入股票 sz000422 数据
+2025-06-24 11:44:32,412 - INFO - 插入股票 sz002556 数据
+2025-06-24 11:44:32,414 - INFO - 插入股票 sz002312 数据
+2025-06-24 11:44:32,415 - INFO - 插入股票 sz002170 数据
+2025-06-24 11:44:32,416 - INFO - 插入股票 sz000792 数据
+2025-06-24 11:44:32,418 - INFO - 插入股票 sh600096 数据
+2025-06-24 11:44:32,420 - INFO - 插入股票 sz001231 数据
+2025-06-24 11:44:32,423 - INFO - 插入股票 sz002731 数据
+2025-06-24 11:44:32,425 - INFO - 插入股票 sz200553 数据
+2025-06-24 11:44:32,426 - INFO - 插入股票 sh603810 数据
+2025-06-24 11:44:32,427 - INFO - 插入股票 sh603970 数据
+2025-06-24 11:44:32,429 - INFO - 插入股票 sz301035 数据
+2025-06-24 11:44:32,430 - INFO - 插入股票 sz002868 数据
+2025-06-24 11:44:32,431 - INFO - 插入股票 sz003042 数据
+2025-06-24 11:44:32,433 - INFO - 插入股票 sz002391 数据
+2025-06-24 11:44:32,435 - INFO - 插入股票 bj870866 数据
+2025-06-24 11:44:32,437 - INFO - 插入股票 sz301665 数据
+2025-06-24 11:44:32,439 - INFO - 插入股票 sh600486 数据
+2025-06-24 11:44:32,449 - INFO - 成功处理 66 条股票数据到数据库
+2025-06-24 11:44:32,449 - INFO - 数据采集完成,共处理 66 只股票
+2025-06-24 11:44:42,989 - INFO - 收到停止信号,正在关闭...
+2025-06-24 11:44:42,990 - INFO - 股票数据采集器已停止
+2025-06-24 14:59:15,942 - INFO - 数据库连接成功
+2025-06-24 14:59:15,942 - INFO - 股票数据采集器启动
+2025-06-24 14:59:15,943 - INFO - 定时任务已启动,每 5 分钟采集一次
+2025-06-24 14:59:15,943 - INFO - 开始执行股票数据采集...
+2025-06-24 14:59:16,050 - INFO - 成功获取股票 sz300189 数据: 神农种业
+2025-06-24 14:59:16,596 - INFO - 成功获取股票 sz000713 数据: 丰乐种业
+2025-06-24 14:59:17,156 - INFO - 成功获取股票 sh600313 数据: 农发种业
+2025-06-24 14:59:17,716 - INFO - 成功获取股票 bj837403 数据: 康农种业
+2025-06-24 14:59:18,280 - INFO - 成功获取股票 sz200505 数据: 京粮B
+2025-06-24 14:59:18,837 - INFO - 成功获取股票 sz300268 数据: *ST佳沃
+2025-06-24 14:59:19,460 - INFO - 成功获取股票 sz000930 数据: 中粮科技
+2025-06-24 14:59:20,006 - INFO - 成功获取股票 sz002299 数据: 圣农发展
+2025-06-24 14:59:20,595 - INFO - 成功获取股票 sh600371 数据: 万向德农
+2025-06-24 14:59:21,140 - INFO - 成功获取股票 sh600598 数据: 北大荒
+2025-06-24 14:59:21,684 - INFO - 成功获取股票 sh603609 数据: 禾丰股份
+2025-06-24 14:59:22,229 - INFO - 成功获取股票 bj831087 数据: 秋乐种业
+2025-06-24 14:59:22,773 - INFO - 成功获取股票 sh603363 数据: 傲农生物
+2025-06-24 14:59:23,317 - INFO - 成功获取股票 sh603336 数据: 宏辉果蔬
+2025-06-24 14:59:23,861 - INFO - 成功获取股票 sh600354 数据: 敦煌种业
+2025-06-24 14:59:24,403 - INFO - 成功获取股票 sz002385 数据: 大北农
+2025-06-24 14:59:24,948 - INFO - 成功获取股票 sz000048 数据: 京基智农
+2025-06-24 14:59:25,494 - INFO - 成功获取股票 sh600251 数据: 冠农股份
+2025-06-24 14:59:26,038 - INFO - 成功获取股票 sz002321 数据: 华英农业
+2025-06-24 14:59:26,583 - INFO - 成功获取股票 sz000505 数据: 京粮控股
+2025-06-24 14:59:27,127 - INFO - 成功获取股票 sz001366 数据: 播恩集团
+2025-06-24 14:59:27,670 - INFO - 成功获取股票 sz002772 数据: 众兴菌业
+2025-06-24 14:59:28,214 - INFO - 成功获取股票 sz002041 数据: 登海种业
+2025-06-24 14:59:28,758 - INFO - 成功获取股票 sh600127 数据: 金健米业
+2025-06-24 14:59:29,301 - INFO - 成功获取股票 sz002548 数据: 金新农
+2025-06-24 14:59:29,846 - INFO - 成功获取股票 sh605296 数据: 神农集团
+2025-06-24 14:59:30,391 - INFO - 成功获取股票 sh600359 数据: 新农开发
+2025-06-24 14:59:30,937 - INFO - 成功获取股票 sh601952 数据: 苏垦农发
+2025-06-24 14:59:31,480 - INFO - 成功获取股票 sh600975 数据: 新五丰
+2025-06-24 14:59:33,221 - INFO - 成功获取股票 sz300505 数据: 川金诺
+2025-06-24 14:59:33,765 - INFO - 成功获取股票 sh600141 数据: 兴发集团
+2025-06-24 14:59:34,309 - INFO - 成功获取股票 sz000893 数据: 亚钾国际
+2025-06-24 14:59:34,853 - INFO - 成功获取股票 sh600691 数据: 阳煤化工
+2025-06-24 14:59:35,398 - INFO - 成功获取股票 sh600470 数据: 六国化工
+2025-06-24 14:59:35,942 - INFO - 成功获取股票 sz000408 数据: 藏格矿业
+2025-06-24 14:59:36,487 - INFO - 成功获取股票 sz000902 数据: 新洋丰
+2025-06-24 14:59:37,031 - INFO - 成功获取股票 sz002539 数据: 云图控股
+2025-06-24 14:59:37,574 - INFO - 成功获取股票 sz002599 数据: 盛通股份
+2025-06-24 14:59:38,122 - INFO - 成功获取股票 sz002545 数据: 东方铁塔
+2025-06-24 14:59:38,682 - INFO - 成功获取股票 sz300387 数据: 富邦科技
+2025-06-24 14:59:39,226 - INFO - 成功获取股票 sz002274 数据: 华昌化工
+2025-06-24 14:59:39,771 - INFO - 成功获取股票 sz002470 数据: 金正大
+2025-06-24 14:59:40,315 - INFO - 成功获取股票 sz002538 数据: 司尔特
+2025-06-24 14:59:40,860 - INFO - 成功获取股票 sz000731 数据: 四川美丰
+2025-06-24 14:59:41,403 - INFO - 成功获取股票 sh600078 数据: 澄星股份
+2025-06-24 14:59:41,948 - INFO - 成功获取股票 sh600227 数据: 赤天化
+2025-06-24 14:59:42,493 - INFO - 成功获取股票 sh603395 数据: 红四方
+2025-06-24 14:59:43,037 - INFO - 成功获取股票 sz002588 数据: 史丹利
+2025-06-24 14:59:43,581 - INFO - 成功获取股票 sz000422 数据: 湖北宜化
+2025-06-24 14:59:44,126 - INFO - 成功获取股票 sz002556 数据: 辉隆股份
+2025-06-24 14:59:44,672 - INFO - 成功获取股票 sz002312 数据: 川发龙蟒
+2025-06-24 14:59:45,215 - INFO - 成功获取股票 sz002170 数据: 芭田股份
+2025-06-24 14:59:45,761 - INFO - 成功获取股票 sz000792 数据: 盐湖股份
+2025-06-24 14:59:46,305 - INFO - 成功获取股票 sh600096 数据: 云天化
+2025-06-24 14:59:46,849 - INFO - 成功获取股票 sz001231 数据: 农心科技
+2025-06-24 14:59:47,393 - INFO - 成功获取股票 sz002731 数据: 萃华珠宝
+2025-06-24 14:59:47,936 - INFO - 成功获取股票 sz200553 数据: 安道麦B
+2025-06-24 14:59:48,479 - INFO - 成功获取股票 sh603810 数据: 丰山集团
+2025-06-24 14:59:49,023 - INFO - 成功获取股票 sh603970 数据: 中农立华
+2025-06-24 14:59:49,567 - INFO - 成功获取股票 sz301035 数据: 润丰股份
+2025-06-24 14:59:50,111 - INFO - 成功获取股票 sz002868 数据: *ST绿康
+2025-06-24 14:59:50,655 - INFO - 成功获取股票 sz003042 数据: 中农联合
+2025-06-24 14:59:51,250 - INFO - 成功获取股票 sz002391 数据: 长青股份
+2025-06-24 14:59:51,858 - INFO - 成功获取股票 bj870866 数据: 绿亨科技
+2025-06-24 14:59:52,454 - INFO - 成功获取股票 sz301665 数据: 泰禾股份
+2025-06-24 14:59:52,998 - INFO - 成功获取股票 sh600486 数据: 扬农化工
+2025-06-24 14:59:53,498 - INFO - 本次采集完成,共获取 66 只股票数据
+2025-06-24 14:59:53,510 - INFO - 更新股票 sz300189 数据
+2025-06-24 14:59:53,512 - INFO - 更新股票 sz000713 数据
+2025-06-24 14:59:53,514 - INFO - 更新股票 sh600313 数据
+2025-06-24 14:59:53,517 - INFO - 更新股票 bj837403 数据
+2025-06-24 14:59:53,518 - INFO - 更新股票 sz200505 数据
+2025-06-24 14:59:53,520 - INFO - 更新股票 sz300268 数据
+2025-06-24 14:59:53,523 - INFO - 更新股票 sz000930 数据
+2025-06-24 14:59:53,526 - INFO - 更新股票 sz002299 数据
+2025-06-24 14:59:53,528 - INFO - 更新股票 sh600371 数据
+2025-06-24 14:59:53,531 - INFO - 更新股票 sh600598 数据
+2025-06-24 14:59:53,533 - INFO - 更新股票 sh603609 数据
+2025-06-24 14:59:53,535 - INFO - 更新股票 bj831087 数据
+2025-06-24 14:59:53,537 - INFO - 更新股票 sh603363 数据
+2025-06-24 14:59:53,541 - INFO - 更新股票 sh603336 数据
+2025-06-24 14:59:53,544 - INFO - 更新股票 sh600354 数据
+2025-06-24 14:59:53,546 - INFO - 更新股票 sz002385 数据
+2025-06-24 14:59:53,547 - INFO - 更新股票 sz000048 数据
+2025-06-24 14:59:53,548 - INFO - 更新股票 sh600251 数据
+2025-06-24 14:59:53,550 - INFO - 更新股票 sz002321 数据
+2025-06-24 14:59:53,551 - INFO - 更新股票 sz000505 数据
+2025-06-24 14:59:53,553 - INFO - 更新股票 sz001366 数据
+2025-06-24 14:59:53,556 - INFO - 更新股票 sz002772 数据
+2025-06-24 14:59:53,559 - INFO - 更新股票 sz002041 数据
+2025-06-24 14:59:53,562 - INFO - 更新股票 sh600127 数据
+2025-06-24 14:59:53,564 - INFO - 更新股票 sz002548 数据
+2025-06-24 14:59:53,566 - INFO - 更新股票 sh605296 数据
+2025-06-24 14:59:53,567 - INFO - 更新股票 sh600359 数据
+2025-06-24 14:59:53,569 - INFO - 更新股票 sh601952 数据
+2025-06-24 14:59:53,571 - INFO - 更新股票 sh600975 数据
+2025-06-24 14:59:53,574 - INFO - 更新股票 sz300505 数据
+2025-06-24 14:59:53,576 - INFO - 更新股票 sh600141 数据
+2025-06-24 14:59:53,578 - INFO - 更新股票 sz000893 数据
+2025-06-24 14:59:53,579 - INFO - 更新股票 sh600691 数据
+2025-06-24 14:59:53,581 - INFO - 更新股票 sh600470 数据
+2025-06-24 14:59:53,583 - INFO - 更新股票 sz000408 数据
+2025-06-24 14:59:53,585 - INFO - 更新股票 sz000902 数据
+2025-06-24 14:59:53,587 - INFO - 更新股票 sz002539 数据
+2025-06-24 14:59:53,591 - INFO - 更新股票 sz002599 数据
+2025-06-24 14:59:53,595 - INFO - 更新股票 sz002545 数据
+2025-06-24 14:59:53,597 - INFO - 更新股票 sz300387 数据
+2025-06-24 14:59:53,599 - INFO - 更新股票 sz002274 数据
+2025-06-24 14:59:53,601 - INFO - 更新股票 sz002470 数据
+2025-06-24 14:59:53,604 - INFO - 更新股票 sz002538 数据
+2025-06-24 14:59:53,607 - INFO - 更新股票 sz000731 数据
+2025-06-24 14:59:53,609 - INFO - 更新股票 sh600078 数据
+2025-06-24 14:59:53,611 - INFO - 更新股票 sh600227 数据
+2025-06-24 14:59:53,613 - INFO - 更新股票 sh603395 数据
+2025-06-24 14:59:53,615 - INFO - 更新股票 sz002588 数据
+2025-06-24 14:59:53,617 - INFO - 更新股票 sz000422 数据
+2025-06-24 14:59:53,619 - INFO - 更新股票 sz002556 数据
+2025-06-24 14:59:53,621 - INFO - 更新股票 sz002312 数据
+2025-06-24 14:59:53,625 - INFO - 更新股票 sz002170 数据
+2025-06-24 14:59:53,627 - INFO - 更新股票 sz000792 数据
+2025-06-24 14:59:53,629 - INFO - 更新股票 sh600096 数据
+2025-06-24 14:59:53,630 - INFO - 更新股票 sz001231 数据
+2025-06-24 14:59:53,632 - INFO - 更新股票 sz002731 数据
+2025-06-24 14:59:53,634 - INFO - 更新股票 sz200553 数据
+2025-06-24 14:59:53,636 - INFO - 更新股票 sh603810 数据
+2025-06-24 14:59:53,638 - INFO - 更新股票 sh603970 数据
+2025-06-24 14:59:53,641 - INFO - 更新股票 sz301035 数据
+2025-06-24 14:59:53,643 - INFO - 更新股票 sz002868 数据
+2025-06-24 14:59:53,645 - INFO - 更新股票 sz003042 数据
+2025-06-24 14:59:53,647 - INFO - 更新股票 sz002391 数据
+2025-06-24 14:59:53,650 - INFO - 更新股票 bj870866 数据
+2025-06-24 14:59:53,652 - INFO - 更新股票 sz301665 数据
+2025-06-24 14:59:53,655 - INFO - 更新股票 sh600486 数据
+2025-06-24 14:59:53,663 - INFO - 成功处理 66 条股票数据到数据库
+2025-06-24 14:59:53,663 - INFO - 数据采集完成,共处理 66 只股票
+2025-06-24 15:00:29,141 - INFO - 收到停止信号,正在关闭...
+2025-06-24 15:00:29,142 - INFO - 股票数据采集器已停止
diff --git a/data-collector/stock_crawler.py b/data-collector/stock_crawler.py
index 84fc574..eebc160 100644
--- a/data-collector/stock_crawler.py
+++ b/data-collector/stock_crawler.py
@@ -273,9 +273,9 @@ class StockCrawler:
# 检查是否在交易时间内
current_time = now.time()
morning_start = datetime.strptime("09:30", "%H:%M").time()
- morning_end = datetime.strptime("11:30", "%H:%M").time()
+ morning_end = datetime.strptime("12:00", "%H:%M").time()
afternoon_start = datetime.strptime("13:00", "%H:%M").time()
- afternoon_end = datetime.strptime("15:00", "%H:%M").time()
+ afternoon_end = datetime.strptime("17:00", "%H:%M").time()
return (morning_start <= current_time <= morning_end) or \
(afternoon_start <= current_time <= afternoon_end)
diff --git a/logs/agricultural-stock-platform-dev.log b/logs/agricultural-stock-platform-dev.log
index 9108639..66dd874 100644
--- a/logs/agricultural-stock-platform-dev.log
+++ b/logs/agricultural-stock-platform-dev.log
@@ -1,279 +1,402 @@
-2025-06-23 07:31:31 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Starting AgriculturalStockPlatformApplication using Java 1.8.0_202 on WIN11 with PID 2012 (D:\VScodeProject\work_4\backend\target\classes started by shenjianZ in D:\VScodeProject\work_4)
-2025-06-23 07:31:31 [main] DEBUG c.a.s.AgriculturalStockPlatformApplication - Running with Spring Boot v2.7.0, Spring v5.3.20
-2025-06-23 07:31:31 [main] INFO c.a.s.AgriculturalStockPlatformApplication - The following 1 profile is active: "dev"
-2025-06-23 07:31:33 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
-2025-06-23 07:31:33 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.63]
-2025-06-23 07:31:33 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
-2025-06-23 07:31:34 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
-2025-06-23 07:31:34 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 5.6.9.Final
-2025-06-23 07:31:34 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
-2025-06-23 07:31:34 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
-2025-06-23 07:31:34 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
-2025-06-23 07:31:34 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
-2025-06-23 07:31:35 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
-2025-06-23 07:31:36 [main] DEBUG c.b.m.e.s.MybatisSqlSessionFactoryBean - Property 'mapperLocations' was not specified.
-2025-06-23 07:31:37 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
-2025-06-23 07:31:39 [main] WARN c.b.m.core.metadata.TableInfoHelper - Can not find table primary key in Class: "com.agricultural.stock.entity.TechnicalIndicator".
-2025-06-23 07:31:39 [main] WARN c.b.m.c.injector.DefaultSqlInjector - class com.agricultural.stock.entity.TechnicalIndicator ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
-2025-06-23 07:31:39 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Started AgriculturalStockPlatformApplication in 8.129 seconds (JVM running for 10.52)
-2025-06-23 07:32:56 [http-nio-8080-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2025-06-23 07:32:56 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 07:32:56 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 07:32:56 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 07:32:56 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 07:32:56 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 07:32:56 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 6
-2025-06-23 07:33:26 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 07:33:26 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 07:33:26 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 07:33:29 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 07:33:29 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 07:33:29 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 67
-2025-06-23 07:33:29 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 07:33:29 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300505(String), 30(Integer)
-2025-06-23 07:33:29 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 4
-2025-06-23 07:33:29 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 07:33:29 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300505(String), 30(Integer)
-2025-06-23 07:33:29 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 4
-2025-06-23 07:33:29 [http-nio-8080-exec-5] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300505, 预测天数: 7
-2025-06-23 07:33:29 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 07:33:29 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300505(String), 30(Integer)
-2025-06-23 07:33:29 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 4
-2025-06-23 07:33:41 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 07:33:41 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 07:33:41 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 07:33:42 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 07:33:42 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 07:33:42 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 07:33:42 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 07:33:42 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 07:33:42 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 6
-2025-06-23 09:12:12 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:12:12 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:12:12 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:12:12 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:12:12 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:12:12 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 2
-2025-06-23 09:12:25 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:12:25 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:12:25 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:12:41 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:12:41 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:12:41 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:16:47 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:16:47 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:16:47 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:16:47 [http-nio-8080-exec-6] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
-2025-06-23 09:16:47 [http-nio-8080-exec-6] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
-2025-06-23 09:16:47 [http-nio-8080-exec-6] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
-2025-06-23 09:16:49 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:16:49 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:16:49 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:16:53 [http-nio-8080-exec-8] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
-2025-06-23 09:16:53 [http-nio-8080-exec-8] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
-2025-06-23 09:16:53 [http-nio-8080-exec-8] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
-2025-06-23 09:16:55 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:16:55 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:16:55 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:28:04 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:28:04 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:28:04 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:28:04 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:28:04 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:28:04 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:28:21 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:28:21 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:28:21 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:28:25 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:28:25 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:28:25 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:28:25 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:28:25 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:28:25 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:29:21 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:29:21 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:29:21 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:29:21 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:29:21 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:29:21 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:29:22 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:29:22 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:29:22 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:30:56 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:30:56 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:30:56 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:30:56 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:30:56 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:30:56 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:32:01 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:32:01 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:32:01 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:32:01 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:32:01 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:32:01 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:32:11 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:32:11 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:32:11 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:32:11 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:32:11 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:32:11 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:32:18 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:32:18 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:32:18 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:32:27 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:32:27 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:32:27 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:32:28 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:32:28 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:32:28 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:32:47 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:32:47 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:32:48 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:32:48 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:32:48 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:32:48 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:32:54 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:32:54 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:32:54 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:33:00 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:33:00 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:33:00 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:33:00 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:33:00 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:33:00 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:33:28 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:33:28 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:33:28 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:33:30 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 09:33:30 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
-2025-06-23 09:33:30 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 3
-2025-06-23 09:33:44 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:33:44 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:33:44 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:33:46 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 09:33:46 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sh600251(String), 30(Integer)
-2025-06-23 09:33:46 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 3
-2025-06-23 09:33:53 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:33:53 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:33:53 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:33:55 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:33:55 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:33:55 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:33:55 [http-nio-8080-exec-5] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sh600251, 预测天数: 7
-2025-06-23 09:33:55 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 09:33:55 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sh600251(String), 30(Integer)
-2025-06-23 09:33:55 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 3
-2025-06-23 09:34:09 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:34:09 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:34:09 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:34:11 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:34:11 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:34:11 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:34:11 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:34:11 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:34:11 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:35:08 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:35:08 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:35:08 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:35:08 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:35:08 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:35:08 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:35:08 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:35:08 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:35:08 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:35:08 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:35:08 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:35:08 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:35:09 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:35:09 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:35:09 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:35:09 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:35:09 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:35:09 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:35:10 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:35:10 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:35:10 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:35:10 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:35:10 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:35:10 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:35:22 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:35:22 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:35:22 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:35:22 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:35:22 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:35:22 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:35:26 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:35:26 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:35:26 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:35:28 [http-nio-8080-exec-3] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
-2025-06-23 09:35:28 [http-nio-8080-exec-3] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
-2025-06-23 09:35:28 [http-nio-8080-exec-3] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
-2025-06-23 09:35:33 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:35:33 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:35:33 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
-2025-06-23 09:35:33 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 09:35:33 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002312(String), 30(Integer)
-2025-06-23 09:35:33 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 3
-2025-06-23 09:35:33 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 09:35:33 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002312(String), 30(Integer)
-2025-06-23 09:35:33 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 3
-2025-06-23 09:35:33 [http-nio-8080-exec-8] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz002312, 预测天数: 7
-2025-06-23 09:35:33 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
-2025-06-23 09:35:33 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002312(String), 30(Integer)
-2025-06-23 09:35:33 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 3
-2025-06-23 09:35:49 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:35:49 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:35:49 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:35:51 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:35:51 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:35:51 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:35:51 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:35:51 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:35:51 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 3
-2025-06-23 09:40:34 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:40:34 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:40:34 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:40:34 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:40:34 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 4
-2025-06-23 09:40:34 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:40:47 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:40:47 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:40:47 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 67
-2025-06-23 09:40:48 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:40:48 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:40:48 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:40:49 [http-nio-8080-exec-7] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
-2025-06-23 09:40:49 [http-nio-8080-exec-7] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
-2025-06-23 09:40:49 [http-nio-8080-exec-7] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
-2025-06-23 09:40:50 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
-2025-06-23 09:40:50 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
-2025-06-23 09:40:50 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 67
-2025-06-23 09:40:51 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:40:51 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:40:51 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:40:52 [http-nio-8080-exec-5] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
-2025-06-23 09:40:52 [http-nio-8080-exec-5] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
-2025-06-23 09:40:52 [http-nio-8080-exec-5] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
-2025-06-23 09:45:37 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:45:37 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:45:37 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:45:37 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:45:37 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:45:37 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 4
-2025-06-23 09:45:49 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
-2025-06-23 09:45:49 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
-2025-06-23 09:45:49 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
-2025-06-23 09:45:52 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:45:52 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:45:52 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:45:52 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:45:52 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
-2025-06-23 09:45:52 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 4
-2025-06-23 09:46:00 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
-2025-06-23 09:46:00 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
-2025-06-23 09:46:00 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
-2025-06-23 09:46:00 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
-2025-06-23 09:46:00 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
-2025-06-23 09:46:00 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 4
-2025-06-23 09:46:18 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
-2025-06-23 09:46:18 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
+2025-06-24 11:45:50 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Starting AgriculturalStockPlatformApplication using Java 1.8.0_202 on WIN11 with PID 23408 (D:\VScodeProject\work_4\backend\target\classes started by shenjianZ in D:\VScodeProject\work_4)
+2025-06-24 11:45:50 [main] DEBUG c.a.s.AgriculturalStockPlatformApplication - Running with Spring Boot v2.7.0, Spring v5.3.20
+2025-06-24 11:45:50 [main] INFO c.a.s.AgriculturalStockPlatformApplication - The following 1 profile is active: "dev"
+2025-06-24 11:45:53 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
+2025-06-24 11:45:53 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.63]
+2025-06-24 11:45:53 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2025-06-24 11:45:53 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-06-24 11:45:53 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 5.6.9.Final
+2025-06-24 11:45:54 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-06-24 11:45:54 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
+2025-06-24 11:45:54 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
+2025-06-24 11:45:54 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-06-24 11:45:55 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-06-24 11:45:55 [main] DEBUG c.b.m.e.s.MybatisSqlSessionFactoryBean - Property 'mapperLocations' was not specified.
+2025-06-24 11:45:55 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-06-24 11:45:56 [main] WARN c.b.m.core.metadata.TableInfoHelper - Can not find table primary key in Class: "com.agricultural.stock.entity.TechnicalIndicator".
+2025-06-24 11:45:56 [main] WARN c.b.m.c.injector.DefaultSqlInjector - class com.agricultural.stock.entity.TechnicalIndicator ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
+2025-06-24 11:45:56 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Started AgriculturalStockPlatformApplication in 6.924 seconds (JVM running for 9.092)
+2025-06-24 11:46:40 [http-nio-8080-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-06-24 11:46:40 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 11:46:40 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 11:46:40 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 11:46:40 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 11:46:40 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 11:46:40 [http-nio-8080-exec-5] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 11:46:40 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 11:46:40 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
+2025-06-24 11:46:40 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 11:46:59 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 11:46:59 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 11:46:59 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 11:47:01 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 11:47:01 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 11:47:01 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 11:47:01 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 11:47:01 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 11:47:01 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 11:47:01 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 11:47:01 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 11:47:01 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 11:47:01 [http-nio-8080-exec-8] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 11:47:01 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 11:47:01 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 11:47:01 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 11:47:10 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 11:47:10 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 11:47:10 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 11:47:12 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 11:47:12 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 11:47:12 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 11:47:12 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 11:47:12 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
+2025-06-24 11:47:12 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 11:47:17 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 11:47:17 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 11:47:17 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 11:47:19 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 11:47:19 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 11:47:19 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 11:47:19 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
+2025-06-24 11:47:19 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 11:47:19 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 11:47:19 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
+2025-06-24 11:47:19 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
+2025-06-24 11:47:19 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
+2025-06-24 11:47:20 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 11:47:20 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 11:47:20 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 11:47:20 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 11:47:20 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
+2025-06-24 11:47:20 [http-nio-8080-exec-7] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 11:47:20 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 11:47:20 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 11:47:20 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 11:47:20 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 11:47:20 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 11:47:20 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 11:47:20 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
+2025-06-24 11:47:20 [http-nio-8080-exec-9] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 11:47:20 [http-nio-8080-exec-10] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 11:49:42 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
+2025-06-24 11:49:42 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
+2025-06-24 15:06:02 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Starting AgriculturalStockPlatformApplication using Java 1.8.0_202 on WIN11 with PID 24344 (D:\VScodeProject\work_4\backend\target\classes started by shenjianZ in D:\VScodeProject\work_4)
+2025-06-24 15:06:02 [main] DEBUG c.a.s.AgriculturalStockPlatformApplication - Running with Spring Boot v2.7.0, Spring v5.3.20
+2025-06-24 15:06:02 [main] INFO c.a.s.AgriculturalStockPlatformApplication - The following 1 profile is active: "dev"
+2025-06-24 15:06:04 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
+2025-06-24 15:06:04 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.63]
+2025-06-24 15:06:04 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2025-06-24 15:06:05 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-06-24 15:06:05 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 5.6.9.Final
+2025-06-24 15:06:05 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-06-24 15:06:05 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
+2025-06-24 15:06:05 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
+2025-06-24 15:06:05 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-06-24 15:06:06 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-06-24 15:06:06 [main] DEBUG c.b.m.e.s.MybatisSqlSessionFactoryBean - Property 'mapperLocations' was not specified.
+2025-06-24 15:06:07 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-06-24 15:06:08 [main] WARN c.b.m.core.metadata.TableInfoHelper - Can not find table primary key in Class: "com.agricultural.stock.entity.TechnicalIndicator".
+2025-06-24 15:06:08 [main] WARN c.b.m.c.injector.DefaultSqlInjector - class com.agricultural.stock.entity.TechnicalIndicator ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
+2025-06-24 15:06:08 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Started AgriculturalStockPlatformApplication in 6.158 seconds (JVM running for 7.094)
+2025-06-24 15:06:25 [http-nio-8080-exec-4] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-06-24 15:06:26 [http-nio-8080-exec-3] INFO o.s.api.AbstractOpenApiResource - Init duration for springdoc-openapi is: 575 ms
+2025-06-24 15:06:38 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:06:38 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:06:39 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:07:03 [http-nio-8080-exec-5] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
+2025-06-24 15:07:03 [http-nio-8080-exec-5] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
+2025-06-24 15:07:03 [http-nio-8080-exec-5] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
+2025-06-24 15:07:10 [http-nio-8080-exec-2] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
+2025-06-24 15:07:10 [http-nio-8080-exec-2] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 3(Integer)
+2025-06-24 15:07:10 [http-nio-8080-exec-2] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 3
+2025-06-24 15:07:26 [http-nio-8080-exec-7] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
+2025-06-24 15:07:26 [http-nio-8080-exec-7] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 1(Integer)
+2025-06-24 15:07:26 [http-nio-8080-exec-7] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 1
+2025-06-24 15:07:59 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:07:59 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:07:59 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:08:22 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:08:22 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:08:22 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:09:00 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 15:09:00 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 15:09:00 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 15:09:00 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
+2025-06-24 15:09:00 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 15:09:00 [http-nio-8080-exec-3] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 15:10:11 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
+2025-06-24 15:10:11 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
+2025-06-24 15:10:11 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
+2025-06-24 15:10:13 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:10:13 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:10:13 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:10:17 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:10:17 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:10:17 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:10:19 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:10:19 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:10:19 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:10:19 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:10:19 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 30(Integer)
+2025-06-24 15:10:19 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:10:19 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:10:19 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 30(Integer)
+2025-06-24 15:10:19 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:10:19 [http-nio-8080-exec-10] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz002731, 预测天数: 7
+2025-06-24 15:10:19 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:10:19 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 30(Integer)
+2025-06-24 15:10:19 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:10:21 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:10:21 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:10:21 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:10:24 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:10:24 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:10:24 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:10:25 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:10:25 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:10:25 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:10:25 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:10:25 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 30(Integer)
+2025-06-24 15:10:25 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:10:25 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:10:25 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 30(Integer)
+2025-06-24 15:10:25 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:10:25 [http-nio-8080-exec-6] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz002731, 预测天数: 7
+2025-06-24 15:10:25 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:10:25 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 30(Integer)
+2025-06-24 15:10:25 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:11:04 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:11:04 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz002731(String), 7(Integer)
+2025-06-24 15:11:04 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:12:12 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:12:12 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:12:12 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:12:24 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:12:24 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:12:24 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:12:31 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:12:31 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:12:31 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:12:32 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:12:32 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:12:32 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:12:32 [http-nio-8080-exec-4] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:12:32 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:12:32 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:12:32 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:20 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:20 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:20 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:20 [http-nio-8080-exec-5] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:20 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:20 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:20 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:25 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:25 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:25 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:25 [http-nio-8080-exec-6] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:25 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:25 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:25 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:28 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:28 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:28 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:28 [http-nio-8080-exec-9] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:28 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:28 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:28 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:30 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:30 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:30 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:30 [http-nio-8080-exec-10] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:30 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:30 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:30 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:31 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:31 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:31 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:31 [http-nio-8080-exec-4] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:31 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:31 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:31 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:31 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:31 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:31 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:31 [http-nio-8080-exec-5] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:31 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:31 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:31 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:31 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:31 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:31 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:31 [http-nio-8080-exec-6] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:31 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:31 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:31 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:32 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:32 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:32 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:32 [http-nio-8080-exec-9] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:32 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:32 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:32 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:32 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:32 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:32 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:32 [http-nio-8080-exec-10] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:32 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:32 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:32 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:32 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:32 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:32 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:32 [http-nio-8080-exec-4] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:32 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:32 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:32 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:32 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:32 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:32 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:32 [http-nio-8080-exec-5] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:32 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:32 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:32 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:32 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:32 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:32 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:32 [http-nio-8080-exec-6] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:32 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:32 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:32 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:32 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:32 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:32 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:32 [http-nio-8080-exec-9] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:32 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:32 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:32 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:33 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:33 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:33 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:33 [http-nio-8080-exec-10] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:33 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:33 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:33 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:33 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:33 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:33 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:33 [http-nio-8080-exec-4] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:33 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:33 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:33 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:33 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 15:13:33 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 15:13:33 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 15:13:33 [http-nio-8080-exec-5] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 15:13:33 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 15:13:33 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 15:13:33 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 15:13:55 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 15:13:55 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 15:13:55 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 15:13:55 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 15:13:55 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
+2025-06-24 15:13:55 [http-nio-8080-exec-6] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 15:15:34 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
+2025-06-24 15:15:34 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
+2025-06-24 21:09:52 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Starting AgriculturalStockPlatformApplication using Java 1.8.0_202 on WIN11 with PID 27760 (D:\VScodeProject\work_4\backend\target\classes started by shenjianZ in D:\VScodeProject\work_4)
+2025-06-24 21:09:52 [main] DEBUG c.a.s.AgriculturalStockPlatformApplication - Running with Spring Boot v2.7.0, Spring v5.3.20
+2025-06-24 21:09:52 [main] INFO c.a.s.AgriculturalStockPlatformApplication - The following 1 profile is active: "dev"
+2025-06-24 21:09:57 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
+2025-06-24 21:09:57 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/9.0.63]
+2025-06-24 21:09:57 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
+2025-06-24 21:09:58 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
+2025-06-24 21:09:58 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 5.6.9.Final
+2025-06-24 21:09:58 [main] INFO o.h.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
+2025-06-24 21:09:59 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
+2025-06-24 21:09:59 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
+2025-06-24 21:09:59 [main] INFO org.hibernate.dialect.Dialect - HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
+2025-06-24 21:10:00 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
+2025-06-24 21:10:00 [main] DEBUG c.b.m.e.s.MybatisSqlSessionFactoryBean - Property 'mapperLocations' was not specified.
+2025-06-24 21:10:01 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
+2025-06-24 21:10:02 [main] WARN c.b.m.core.metadata.TableInfoHelper - Can not find table primary key in Class: "com.agricultural.stock.entity.TechnicalIndicator".
+2025-06-24 21:10:02 [main] WARN c.b.m.c.injector.DefaultSqlInjector - class com.agricultural.stock.entity.TechnicalIndicator ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
+2025-06-24 21:10:02 [main] INFO c.a.s.AgriculturalStockPlatformApplication - Started AgriculturalStockPlatformApplication in 11.351 seconds (JVM running for 12.799)
+2025-06-24 21:10:05 [http-nio-8080-exec-2] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2025-06-24 21:10:06 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 21:10:06 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 21:10:06 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 21:10:06 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
+2025-06-24 21:10:06 [http-nio-8080-exec-1] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 21:10:06 [http-nio-8080-exec-2] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 21:10:28 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 21:10:28 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 21:10:28 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 7(Integer)
+2025-06-24 21:10:28 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 21:10:28 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 21:10:28 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 21:10:53 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:10:53 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:10:53 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:11:17 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:11:17 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:11:17 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:11:17 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:11:17 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:11:17 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:11:17 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:11:17 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:11:17 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:11:18 [http-nio-8080-exec-9] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 21:11:18 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:11:18 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:11:18 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:11:19 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getTopGainers - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY change_percent DESC LIMIT ?
+2025-06-24 21:11:19 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getTopGainers - ==> Parameters: 10(Integer)
+2025-06-24 21:11:19 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getTopGainers - <== Total: 10
+2025-06-24 21:11:37 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:11:37 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:11:37 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:11:38 [http-nio-8080-exec-2] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data) ORDER BY volume DESC LIMIT ?
+2025-06-24 21:11:38 [http-nio-8080-exec-2] DEBUG c.a.s.m.StockDataMapper.getTopVolume - ==> Parameters: 10(Integer)
+2025-06-24 21:11:38 [http-nio-8080-exec-2] DEBUG c.a.s.m.StockDataMapper.getTopVolume - <== Total: 10
+2025-06-24 21:11:39 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT 1
+2025-06-24 21:11:39 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - ==> Parameters:
+2025-06-24 21:11:39 [http-nio-8080-exec-4] DEBUG c.a.s.m.M.getLatestMarketAnalysis - <== Total: 1
+2025-06-24 21:11:40 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Preparing: SELECT * FROM market_analysis ORDER BY analysis_date DESC LIMIT ?
+2025-06-24 21:11:40 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - ==> Parameters: 30(Integer)
+2025-06-24 21:11:40 [http-nio-8080-exec-8] DEBUG c.a.s.m.M.getRecentMarketAnalysis - <== Total: 5
+2025-06-24 21:11:56 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:11:56 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:11:56 [http-nio-8080-exec-5] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:11:59 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:11:59 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:11:59 [http-nio-8080-exec-6] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:12:00 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:12:00 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:12:00 [http-nio-8080-exec-7] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:12:00 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:12:00 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:12:00 [http-nio-8080-exec-3] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:12:00 [http-nio-8080-exec-9] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 21:12:00 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:12:00 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:12:00 [http-nio-8080-exec-9] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:12:18 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:12:18 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:12:18 [http-nio-8080-exec-10] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:12:19 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:12:19 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:12:19 [http-nio-8080-exec-1] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:12:35 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:12:35 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:12:35 [http-nio-8080-exec-2] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:12:37 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Preparing: SELECT * FROM stock_data WHERE DATE(trade_date) = (SELECT MAX(DATE(trade_date)) FROM stock_data)
+2025-06-24 21:12:37 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - ==> Parameters:
+2025-06-24 21:12:37 [http-nio-8080-exec-4] DEBUG c.a.s.m.S.getLatestStockData - <== Total: 66
+2025-06-24 21:12:38 [http-nio-8080-exec-8] INFO c.a.s.service.impl.StockServiceImpl - 生成股票预测数据,股票代码: sz300189, 预测天数: 7
+2025-06-24 21:12:38 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Preparing: SELECT * FROM stock_data WHERE stock_code = ? ORDER BY trade_date DESC LIMIT ?
+2025-06-24 21:12:38 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - ==> Parameters: sz300189(String), 30(Integer)
+2025-06-24 21:12:38 [http-nio-8080-exec-8] DEBUG c.a.s.m.S.getStockHistoryData - <== Total: 5
+2025-06-24 21:17:37 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
+2025-06-24 21:17:37 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
diff --git a/logs/agricultural-stock-platform-dev.log.2025-06-23.0.gz b/logs/agricultural-stock-platform-dev.log.2025-06-23.0.gz
new file mode 100644
index 0000000..ff5ebea
Binary files /dev/null and b/logs/agricultural-stock-platform-dev.log.2025-06-23.0.gz differ
diff --git a/spark-processor/README_SCHEDULER.md b/spark-processor/README_SCHEDULER.md
new file mode 100644
index 0000000..492e66b
--- /dev/null
+++ b/spark-processor/README_SCHEDULER.md
@@ -0,0 +1,219 @@
+# Spark 数据处理定时调度器
+
+## 概述
+
+该定时调度器功能为农业股票数据处理器提供了自动化的数据处理能力,能够每30分钟自动执行一次完整的数据处理流程。
+
+## 功能特性
+
+- ✅ **自动定时执行**: 每30分钟自动运行一次Spark数据处理任务
+- ✅ **实时监控**: 提供调度器状态查询功能
+- ✅ **手动触发**: 支持手动触发任务执行
+- ✅ **异常处理**: 完善的错误处理和日志记录
+- ✅ **资源管理**: 自动管理Spark会话的创建和销毁
+- ✅ **交互式控制**: 支持运行时命令交互
+
+## 快速开始
+### spark-submit
+``` shell
+spark-submit \
+ --class com.agricultural.spark.StockDataProcessor \
+ --master local[*] \
+ --driver-java-options "-Denvironment=prod" \
+ target/spark-data-processor-1.0.0.jar \
+ scheduler
+```
+
+### 1. 启动定时调度器
+
+#### Linux/Mac 系统
+```bash
+# 进入spark-processor目录
+cd spark-processor
+
+# 启动定时调度器
+./start-scheduler.sh
+```
+
+#### Windows 系统
+```batch
+# 进入spark-processor目录
+cd spark-processor
+
+# 启动定时调度器
+start-scheduler.bat
+```
+
+### 2. 使用命令行参数启动
+```bash
+# 编译项目
+mvn clean package -DskipTests
+
+# 直接运行调度器模式
+java -jar target/spark-data-processor-1.0.0.jar scheduler
+```
+
+
+## 交互式命令
+
+启动调度器后,可以使用以下命令进行交互:
+
+| 命令 | 说明 |
+|------|------|
+| `status` | 查看调度器当前状态 |
+| `trigger` | 手动触发一次数据处理任务 |
+| `help` | 显示所有可用命令 |
+| `stop` | 停止调度器并退出程序 |
+
+## 运行模式
+
+### 调度器模式
+```bash
+java -jar target/spark-data-processor-1.0.0.jar scheduler
+```
+- 每30分钟自动执行一次数据处理
+- 支持交互式命令控制
+- 适用于生产环境长期运行
+
+### 批处理模式
+```bash
+java -jar target/spark-data-processor-1.0.0.jar batch
+# 或
+java -jar target/spark-data-processor-1.0.0.jar
+```
+- 执行一次完整的数据处理流程后退出
+- 适用于手动执行或脚本调用
+
+## 配置说明
+
+### 调度时间间隔修改
+
+如需修改执行间隔时间,可以在 `SparkJobScheduler.java` 中修改:
+
+```java
+// 创建触发器 - 修改执行间隔
+Trigger trigger = TriggerBuilder.newTrigger()
+ .withSchedule(SimpleScheduleBuilder.simpleSchedule()
+ .withIntervalInMinutes(30) // 修改这里的分钟数
+ .repeatForever())
+ .build();
+```
+
+### JVM 参数配置
+
+在启动脚本中可以调整JVM参数:
+
+```bash
+# Linux/Mac (start-scheduler.sh)
+JVM_OPTS="-Xmx4g -Xms2g -XX:+UseG1GC"
+
+# Windows (start-scheduler.bat)
+set JVM_OPTS=-Xmx4g -Xms2g -XX:+UseG1GC
+```
+
+## 日志管理
+
+### 日志文件位置
+- 应用日志: `logs/agricultural-stock-platform.log`
+- Spark处理日志: 包含在应用日志中
+
+### 日志级别
+- INFO: 正常运行信息
+- WARN: 警告信息(如数据库连接异常)
+- ERROR: 错误信息
+
+## 监控和故障排除
+
+### 1. 检查调度器状态
+```
+status
+```
+
+### 2. 查看日志文件
+```bash
+# 实时查看日志
+tail -f logs/agricultural-stock-platform.log
+
+# 搜索错误日志
+grep ERROR logs/agricultural-stock-platform.log
+```
+
+### 3. 常见问题
+
+#### 问题1: 内存不足
+**症状**: OutOfMemoryError 异常
+**解决**: 增加JVM堆内存大小
+```bash
+JVM_OPTS="-Xmx8g -Xms4g" # 增加内存
+```
+
+#### 问题2: 数据库连接失败
+**症状**: 无法连接到MySQL数据库
+**解决**: 检查数据库配置和网络连接
+```
+# 检查配置文件
+src/main/resources/application-prod.conf
+```
+
+#### 问题3: Spark任务执行失败
+**症状**: Spark处理过程中出现异常
+**解决**:
+1. 检查数据源连接
+2. 验证数据格式
+3. 检查磁盘空间
+
+## 性能优化
+
+### 1. Spark配置优化
+```java
+// 在SparkConfig中调整参数
+spark.sql.adaptive.enabled=true
+spark.sql.adaptive.coalescePartitions.enabled=true
+```
+
+### 2. 资源配置
+- 根据数据量调整执行器内存
+- 合理设置并行度
+- 优化分区策略
+
+### 3. 调度频率
+- 根据数据更新频率调整执行间隔
+- 避免任务重叠执行
+
+## 部署建议
+
+### 生产环境
+1. 使用系统服务管理调度器
+2. 配置日志轮转
+3. 设置监控报警
+4. 定期备份配置文件
+
+### 开发环境
+1. 使用较小的内存配置
+2. 增加日志详细程度
+3. 缩短执行间隔进行测试
+
+## 技术架构
+
+```
+定时调度器架构:
+┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐
+│ Quartz │ │ Spark │ │ MySQL │
+│ Scheduler │───▶│ Processor │───▶│ Database │
+│ │ │ │ │ │
+└─────────────────┘ └──────────────┘ └─────────────────┘
+ │ │
+ ▼ ▼
+┌─────────────────┐ ┌──────────────┐
+│ 用户交互接口 │ │ 日志系统 │
+│ (命令行) │ │ │
+└─────────────────┘ └──────────────┘
+```
+
+## 版本更新记录
+
+### v1.0.0
+- 初始版本
+- 支持每30分钟定时执行
+- 提供基本的交互式命令
+- 集成Quartz调度框架
\ No newline at end of file
diff --git a/spark-processor/pom.xml b/spark-processor/pom.xml
index 2203bf2..f2413b9 100644
--- a/spark-processor/pom.xml
+++ b/spark-processor/pom.xml
@@ -95,6 +95,13 @@
3.12.0
+
+
+ org.quartz-scheduler
+ quartz
+ 2.3.2
+
+
junit
diff --git a/spark-processor/spark-scheduler.service b/spark-processor/spark-scheduler.service
new file mode 100644
index 0000000..7e48e1e
--- /dev/null
+++ b/spark-processor/spark-scheduler.service
@@ -0,0 +1,37 @@
+[Unit]
+Description=Agricultural Stock Spark Data Processor Scheduler
+Documentation=https://github.com/your-repo/agricultural-stock-platform
+After=network.target mysql.service
+
+[Service]
+Type=simple
+User=spark
+Group=spark
+WorkingDirectory=/opt/agricultural-stock-platform/spark-processor
+ExecStart=/usr/bin/java -Xmx4g -Xms2g -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Dlogback.configurationFile=src/main/resources/logback.xml -Dconfig.file=src/main/resources/application-prod.conf -jar target/spark-data-processor-1.0.0.jar scheduler
+ExecStop=/bin/kill -TERM $MAINPID
+Restart=on-failure
+RestartSec=30
+StandardOutput=journal
+StandardError=journal
+SyslogIdentifier=spark-scheduler
+
+# 环境变量
+Environment=JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
+Environment=SPARK_HOME=/opt/spark
+Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+# 资源限制
+LimitNOFILE=65536
+LimitNPROC=4096
+
+# 安全设置
+NoNewPrivileges=true
+PrivateTmp=true
+ProtectSystem=strict
+ProtectHome=true
+ReadWritePaths=/opt/agricultural-stock-platform/spark-processor/logs
+ReadWritePaths=/tmp/spark-warehouse
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/spark-processor/src/main/java/com/agricultural/spark/StockDataProcessor.java b/spark-processor/src/main/java/com/agricultural/spark/StockDataProcessor.java
index eb66353..b20da2b 100644
--- a/spark-processor/src/main/java/com/agricultural/spark/StockDataProcessor.java
+++ b/spark-processor/src/main/java/com/agricultural/spark/StockDataProcessor.java
@@ -1,6 +1,7 @@
package com.agricultural.spark;
import com.agricultural.spark.config.SparkConfig;
+import com.agricultural.spark.scheduler.SparkJobScheduler;
import com.agricultural.spark.service.DataCleaningService;
import com.agricultural.spark.service.DatabaseSaveService;
import com.agricultural.spark.service.MarketAnalysisService;
@@ -13,6 +14,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
+import java.util.Scanner;
/**
* 农业股票数据处理器主类
@@ -201,25 +203,64 @@ public class StockDataProcessor {
logger.info("农业股票数据处理器启动");
StockDataProcessor processor = null;
+ SparkJobScheduler scheduler = null;
+ Scanner scanner = null;
+
try {
// 加载配置
SparkConfig config = SparkConfig.load();
- processor = new StockDataProcessor(config);
if (args.length > 0) {
String mode = args[0];
switch (mode) {
+ case "scheduler":
+ // 定时调度模式 - 每30分钟执行一次
+ logger.info("启动定时调度模式 - 每30分钟执行一次数据处理");
+ scheduler = new SparkJobScheduler(config);
+ scheduler.start();
+
+ // 保持程序运行,监听用户输入
+ scanner = new Scanner(System.in);
+ logger.info("调度器已启动,输入命令:");
+ logger.info(" 'status' - 查看调度器状态");
+ logger.info(" 'trigger' - 手动触发一次任务执行");
+ logger.info(" 'stop' - 停止调度器并退出程序");
+
+ String command;
+ while (!(command = scanner.nextLine().trim().toLowerCase()).equals("stop")) {
+ switch (command) {
+ case "status":
+ logger.info("调度器状态: {}", scheduler.getSchedulerStatus());
+ break;
+ case "trigger":
+ scheduler.triggerJobNow();
+ break;
+ case "help":
+ logger.info("可用命令: status, trigger, stop, help");
+ break;
+ default:
+ logger.info("未知命令: {},输入 'help' 查看可用命令", command);
+ break;
+ }
+ }
+ break;
+
case "stream":
// 流处理模式
+ processor = new StockDataProcessor(config);
processor.runStreamProcessing();
break;
+
+ case "batch":
default:
- // 默认批处理模式
+ // 批处理模式
+ processor = new StockDataProcessor(config);
processor.runBatchProcessing();
break;
}
} else {
// 默认批处理模式
+ processor = new StockDataProcessor(config);
processor.runBatchProcessing();
}
@@ -227,9 +268,16 @@ public class StockDataProcessor {
logger.error("程序运行过程中出现错误", e);
System.exit(1);
} finally {
+ // 清理资源
+ if (scheduler != null) {
+ scheduler.stop();
+ }
if (processor != null) {
processor.close();
}
+ if (scanner != null) {
+ scanner.close();
+ }
logger.info("农业股票数据处理器已停止");
}
}
diff --git a/spark-processor/src/main/java/com/agricultural/spark/scheduler/SparkJobScheduler.java b/spark-processor/src/main/java/com/agricultural/spark/scheduler/SparkJobScheduler.java
new file mode 100644
index 0000000..ce1794a
--- /dev/null
+++ b/spark-processor/src/main/java/com/agricultural/spark/scheduler/SparkJobScheduler.java
@@ -0,0 +1,161 @@
+package com.agricultural.spark.scheduler;
+
+import com.agricultural.spark.StockDataProcessor;
+import com.agricultural.spark.config.SparkConfig;
+import org.quartz.*;
+import org.quartz.impl.StdSchedulerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Spark任务定时调度器
+ * 使用Quartz调度器实现定时执行Spark数据处理任务
+ *
+ * @author Agricultural Stock Platform Team
+ */
+public class SparkJobScheduler {
+
+ private static final Logger logger = LoggerFactory.getLogger(SparkJobScheduler.class);
+
+ private Scheduler scheduler;
+ private final SparkConfig sparkConfig;
+
+ public SparkJobScheduler(SparkConfig sparkConfig) {
+ this.sparkConfig = sparkConfig;
+ }
+
+ /**
+ * 启动定时调度器
+ */
+ public void start() {
+ try {
+ logger.info("正在启动Spark任务定时调度器...");
+
+ // 创建调度器工厂
+ SchedulerFactory schedulerFactory = new StdSchedulerFactory();
+ scheduler = schedulerFactory.getScheduler();
+
+ // 定义任务详情
+ JobDetail jobDetail = JobBuilder.newJob(SparkProcessingJob.class)
+ .withIdentity("sparkProcessingJob", "sparkGroup")
+ .withDescription("农业股票数据处理定时任务")
+ .usingJobData("sparkConfig", sparkConfig.toString()) // 传递配置
+ .build();
+
+ // 创建触发器 - 每30分钟执行一次
+ Trigger trigger = TriggerBuilder.newTrigger()
+ .withIdentity("sparkProcessingTrigger", "sparkGroup")
+ .withDescription("每30分钟执行一次Spark数据处理")
+ .startNow()
+ .withSchedule(SimpleScheduleBuilder.simpleSchedule()
+ .withIntervalInMinutes(30)
+ .repeatForever())
+ .build();
+
+ // 调度任务
+ scheduler.scheduleJob(jobDetail, trigger);
+
+ // 启动调度器
+ scheduler.start();
+
+ logger.info("Spark任务定时调度器启动成功,每30分钟执行一次数据处理任务");
+
+ } catch (SchedulerException e) {
+ logger.error("启动定时调度器失败", e);
+ throw new RuntimeException("定时调度器启动失败", e);
+ }
+ }
+
+ /**
+ * 停止定时调度器
+ */
+ public void stop() {
+ try {
+ if (scheduler != null && !scheduler.isShutdown()) {
+ logger.info("正在停止Spark任务定时调度器...");
+ scheduler.shutdown(true);
+ logger.info("Spark任务定时调度器已停止");
+ }
+ } catch (SchedulerException e) {
+ logger.error("停止定时调度器失败", e);
+ }
+ }
+
+ /**
+ * 手动触发一次任务执行
+ */
+ public void triggerJobNow() {
+ try {
+ if (scheduler != null && scheduler.isStarted()) {
+ JobKey jobKey = new JobKey("sparkProcessingJob", "sparkGroup");
+ scheduler.triggerJob(jobKey);
+ logger.info("已手动触发Spark数据处理任务");
+ }
+ } catch (SchedulerException e) {
+ logger.error("手动触发任务失败", e);
+ }
+ }
+
+ /**
+ * 获取调度器状态信息
+ */
+ public String getSchedulerStatus() {
+ try {
+ if (scheduler == null) {
+ return "调度器未初始化";
+ }
+
+ if (scheduler.isStarted()) {
+ return "调度器运行中";
+ } else if (scheduler.isShutdown()) {
+ return "调度器已停止";
+ } else {
+ return "调度器未启动";
+ }
+ } catch (SchedulerException e) {
+ logger.error("获取调度器状态失败", e);
+ return "调度器状态未知";
+ }
+ }
+
+ /**
+ * Quartz任务类
+ */
+ public static class SparkProcessingJob implements Job {
+
+ private static final Logger jobLogger = LoggerFactory.getLogger(SparkProcessingJob.class);
+
+ @Override
+ public void execute(JobExecutionContext context) throws JobExecutionException {
+ jobLogger.info("开始执行定时Spark数据处理任务...");
+
+ StockDataProcessor processor = null;
+
+ try {
+ // 加载配置
+ SparkConfig config = SparkConfig.load();
+
+ // 创建处理器实例
+ processor = new StockDataProcessor(config);
+
+ // 执行批处理任务
+ processor.runBatchProcessing();
+
+ jobLogger.info("定时Spark数据处理任务执行完成");
+
+ } catch (Exception e) {
+ jobLogger.error("定时Spark数据处理任务执行失败", e);
+ throw new JobExecutionException("Spark数据处理任务失败", e);
+ } finally {
+ // 确保关闭Spark会话
+ if (processor != null) {
+ try {
+ processor.close();
+ } catch (Exception e) {
+ jobLogger.warn("关闭Spark会话时出现警告", e);
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/spark-processor/src/main/resources/application-dev.conf b/spark-processor/src/main/resources/application-dev.conf
index 5a978d8..44ad487 100644
--- a/spark-processor/src/main/resources/application-dev.conf
+++ b/spark-processor/src/main/resources/application-dev.conf
@@ -5,11 +5,11 @@ spark {
}
mysql {
- host = "localhost"
+ host = "43.143.145.172"
port = 3306
database = "agricultural_stock"
user = "root"
- password = "root"
+ password = "kyff145972"
}
output {
diff --git a/spark-processor/src/main/resources/application-docker.conf b/spark-processor/src/main/resources/application-docker.conf
deleted file mode 100644
index 282aa33..0000000
--- a/spark-processor/src/main/resources/application-docker.conf
+++ /dev/null
@@ -1,20 +0,0 @@
-# Docker环境配置
-spark {
- master = "spark://spark-master:7077"
- app-name = "agricultural-stock-data-processor-docker"
-}
-
-mysql {
- host = "mysql"
- port = 3306
- database = "agricultural_stock"
- user = "root"
- password = "123456"
-}
-
-output {
- path = "/app/spark-output"
-}
-
-# 生产模式
-debug = false
\ No newline at end of file
diff --git a/spark-processor/src/main/resources/application-prod.conf b/spark-processor/src/main/resources/application-prod.conf
index b1d06eb..6d32745 100644
--- a/spark-processor/src/main/resources/application-prod.conf
+++ b/spark-processor/src/main/resources/application-prod.conf
@@ -5,7 +5,7 @@ spark {
}
mysql {
- host = ${MYSQL_HOST:-"localhost"}
+ host = ${MYSQL_HOST:-"43.143.145.172"}
port = ${MYSQL_PORT:-3306}
database = ${MYSQL_DATABASE:-"agricultural_stock"}
user = ${MYSQL_USER:-"root"}
diff --git a/spark-processor/start-scheduler.sh b/spark-processor/start-scheduler.sh
new file mode 100644
index 0000000..1ba5c03
--- /dev/null
+++ b/spark-processor/start-scheduler.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+# 农业股票数据处理器 - 定时调度器启动脚本
+# 每30分钟自动执行一次数据处理任务
+
+echo "==================================="
+echo "农业股票数据处理器 - 定时调度器模式"
+echo "==================================="
+echo "该模式将每30分钟自动执行一次数据处理"
+echo "启动中..."
+echo ""
+
+# 设置Java环境变量(如果需要)
+# export JAVA_HOME=/path/to/java
+
+# 设置Spark环境变量(如果需要)
+# export SPARK_HOME=/path/to/spark
+
+# 获取当前脚本所在目录
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+
+# 进入项目目录
+cd "$SCRIPT_DIR"
+
+# 检查target目录是否存在编译后的jar文件
+JAR_FILE="target/spark-data-processor-1.0.0.jar"
+
+if [ ! -f "$JAR_FILE" ]; then
+ echo "未找到编译后的jar文件,正在编译项目..."
+
+ # 检查是否有maven
+ if ! command -v mvn &> /dev/null; then
+ echo "错误: 未找到Maven命令,请确保Maven已安装并配置到PATH中"
+ exit 1
+ fi
+
+ # 编译项目
+ echo "执行: mvn clean package -DskipTests"
+ mvn clean package -DskipTests
+
+ if [ $? -ne 0 ]; then
+ echo "项目编译失败,请检查错误信息"
+ exit 1
+ fi
+fi
+
+# 检查配置文件
+CONFIG_FILE="src/main/resources/application-prod.conf"
+if [ ! -f "$CONFIG_FILE" ]; then
+ echo "警告: 未找到生产环境配置文件 $CONFIG_FILE"
+ echo "将使用开发环境配置"
+ CONFIG_FILE="src/main/resources/application-dev.conf"
+fi
+
+# 设置JVM参数
+JVM_OPTS="-Xmx4g -Xms2g -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
+
+# 设置日志配置
+LOG_CONFIG="-Dlogback.configurationFile=src/main/resources/logback.xml"
+
+# 启动应用
+echo "启动定时调度器..."
+echo "配置文件: $CONFIG_FILE"
+echo "JVM参数: $JVM_OPTS"
+echo ""
+echo "使用以下命令与调度器交互:"
+echo " status - 查看调度器状态"
+echo " trigger - 手动触发一次任务"
+echo " stop - 停止调度器"
+echo " help - 显示帮助信息"
+echo ""
+
+# 执行Java程序
+java $JVM_OPTS $LOG_CONFIG \
+ -Dconfig.file="$CONFIG_FILE" \
+ -jar "$JAR_FILE" scheduler
+
+echo ""
+echo "定时调度器已停止"
\ No newline at end of file