You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch 5迁移后DateTimeParseException异常求助

根因分析

出现该异常的核心原因是Spring Batch在读取作业执行参数时,尝试将字符串值date转换为java.util.Date类型,但该字符串并非有效的日期格式。结合你的场景,大概率是第一次因证书失败的作业执行记录中,BATCH_JOB_EXECUTION_PARAMS表被插入了一条无效参数记录:某条参数的PARAMETER_VALUE为date,但对应的PARAMETER_TYPE被标记为日期类型(如java.util.Date)。

导致这种情况的可能触发点:

  • Spring Batch 5对作业参数的存储/解析逻辑与v4存在差异,首次启动失败时(证书问题),框架内部参数处理出现异常,写入了无效的参数值。
  • 你的作业配置中,存在名为date的参数,但构建JobParameters时错误地将参数值设置为字符串date,而非有效的日期对象或日期格式字符串。
解决方案

1. 排查并清理无效的作业执行记录

  1. 登录Oracle数据库,执行以下查询找到异常参数对应的作业执行ID:
SELECT JOB_EXECUTION_ID
FROM BDB_DBA.BATCH_JOB_EXECUTION_PARAMS
WHERE PARAMETER_VALUE = 'date' AND PARAMETER_TYPE LIKE '%Date%';
  1. 根据查询到的JOB_EXECUTION_ID,删除关联的所有批处理表记录(避免数据不一致):
-- 删除步骤执行记录
DELETE FROM BDB_DBA.BATCH_STEP_EXECUTION WHERE JOB_EXECUTION_ID = ?;
-- 删除作业执行参数记录
DELETE FROM BDB_DBA.BATCH_JOB_EXECUTION_PARAMS WHERE JOB_EXECUTION_ID = ?;
-- 删除作业执行记录
DELETE FROM BDB_DBA.BATCH_JOB_EXECUTION WHERE JOB_EXECUTION_ID = ?;
  1. 重启应用后重新触发作业。

2. 校验作业参数的构建逻辑

检查你构建JobParameters的代码,确保日期类型参数的取值是有效的:

  • 若使用java.util.Date,需传入Date对象或符合格式的日期字符串(如yyyy-MM-dd HH:mm:ss)。
  • 若迁移到Spring Batch 5推荐的java.time类型(如LocalDate、LocalDateTime),需确保参数类型与值匹配,同时在JobRepository配置中使用对应的转换器。

3. 确认Spring Batch 5配置正确性

  • 检查JobRepository的配置,确保使用Spring Batch 5的默认参数转换器(DefaultJobParametersConverter),或自定义转换器时能正确处理日期类型。
  • 确认未混用Spring Batch v4的旧版API(如过时的JobParameter构造器),建议使用JobParameterBuilder构建参数:
JobParameters jobParameters = new JobParameterBuilder()
    .addLocalDate("date", LocalDate.now())
    .toJobParameters();

内容的提问来源于stack exchange,提问作者Shaggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:46:11