我正在使用Spring Batch 2.1.8,并运行作业CommandLineJobRunner.如:
java org.springframework.batch.core.launch.support.CommandLineJobRunner classpath:launchContext.xml theJobId
在某些情况下,例如服务器崩溃,可能会中断正在运行的作业.但中断的作业STARTED在Spring Batch Meta-Data表中保留了状态,无法再次运行.
org.springframework.batch.core.repository.JobExecutionAlreadyRunningException: A job execution for this job is already running
我可以想到两个解决方案:
添加一个新的作业参数并每次更改它以使其成为Spring Batch的"新"作业.如:
java org.springframework.batch.core.launch.support.CommandLineJobRunner classpath:launchContext.xml theJobId times=0
当需要重新运行它时,请清除所有相应的输出数据,计数times一次,然后重新运行作业.
手动更改Spring Batch元数据表.
更新状态以使作业可重新启动.如:
UPDATE BATCH_JOB_EXECUTION SET END_TIME = SYSTIMESTAMP, STATUS = 'FAILED', EXIT_CODE = 'FAILOVER' WHERE JOB_EXECUTION_ID =
    (SELECT MAX(JOB_EXECUTION_ID) FROM BATCH_JOB_EXECUTION WHERE JOB_INSTANCE_ID =
        (SELECT MAX(JOB_INSTANCE_ID) FROM BATCH_JOB_INSTANCE WHERE JOB_NAME = 'XXX'));
我试过了,看起来效果很好.
Solution2是个坏主意吗?有陷阱吗?
提前致谢.并且赞赏任何其他解决方案.
解决方案2是目前公认的方法.API不提供修复此方案的方法.过去曾要求框架自动清理,但99%的情况下,需要做出人为决定来确定是否真正需要清理.
我对选项2的唯一注意事项是检查BATCH_STEP_EXECUTION表,以查看最后执行步骤的状态.
| 归档时间: | 
 | 
| 查看次数: | 10127 次 | 
| 最近记录: |