我的项目有 20 多个使用 Spring Batch 构建的批处理作业,并且已经投入生产几年了。我们目前正在将它们迁移到使用 Spring Batch 和 Spring Cloud Task 构建的单个 Spring Boot 应用程序中。然后这些将部署为 Spring Cloud Dataflow 中的任务并部署到 PCF。
鉴于这些作业(仅使用 Spring Batch)已经投入生产,Batch Repository 表包含大量过去执行的数据。当我们部署新迁移的作业(引入 Task 表)时,Batch 表和 Task 表之间的数据将不匹配,因为 Task 表将是新创建的,因此是空的。虽然这不会阻止我们运行新的作业执行,但它确实会阻止我们使用 Spring Cloud Dataflow 中的“作业”选项卡。这是因为为了加载页面,它会查询 TASK_TASK_BATCH 表,试图匹配job_execution_id
每个task_execution_id
. 这会引发其他帖子中提到的臭名昭著的 NullPointerException (数据流任务不适用于 Spring Batch),而每个job_execution_id
.
所以我的问题是,对于任何已经使用 Spring Batch 并且正在迁移相同工作以也使用 Spring Cloud Task 的团队来说,解决这种差异的正确方法是什么?Spring 是否提供了任何流程来解决这个问题?理想情况下,我们希望将过去批处理作业执行的数据保留在批处理存储库表中,我们不想删除它。那么我们是否必须在任务表中制作“匹配”的虚拟数据来消除这种差异?
谢谢你。