如何根据特定的批处理作业定义 Spring 批处理云任务
Posted
技术标签:
【中文标题】如何根据特定的批处理作业定义 Spring 批处理云任务【英文标题】:How can i define a spring batch cloud task based on a specific batch job 【发布时间】:2018-06-02 02:27:17 【问题描述】:我们目前正在将一个复杂的 Spring Boot 批处理 + 管理 UI 系统迁移到一个 spring-cloud-task 基础架构中,该基础架构将由 Cloud Data Flow 进行管理。
作为 POC 的第一阶段,我们必须仍然能够将所有 Spring 批处理作业打包在同一个部署 JAR 下,并能够使用自定义作业参数逐个运行它们,并支持某种 REST API 来执行作业/远程任务。
我们删除了所有 spring-batch 管理依赖项并添加了 spring-cloud-starter-task
我们还将引导应用程序改编为 Spring Cloud Task 编程模型。
在 Spring Cloud 数据流上注册 JAR 后,我们无法定义一个任务,该任务将仅触发具有自定义参数的特定作业。
阅读官方文档和 *** 问题没有任何更有希望的结果。
10 倍
【问题讨论】:
【参考方案1】:为了完成你想做的事情,有两个步骤:
-
将批处理作业重新打包到 Spring Boot über jar 中。这应该很简单。
为要运行的每个作业创建任务定义。创建 über jar 并使用 Spring Cloud Data Flow 注册后,您需要创建作业定义。每个定义如下所示,其中 über jar 包含一个名为
fooJob
的批处理作业和一个名为 barJob
的批处理作业:
dataflow:> app register --name batchJobs --type task --uri <URI to über jar>
dataflow:> task create --name fooBatchJob --definition "batchJobs --spring.batch.job.names=fooJob"
dataflow:> task create --name barBatchJob --definition "batchJobs --spring.batch.job.names=barJob"
【讨论】:
以上是关于如何根据特定的批处理作业定义 Spring 批处理云任务的主要内容,如果未能解决你的问题,请参考以下文章
Spring Batch:根据 itemReader 中的结果执行作业
如何将 JobParameters 传递给 Spring Cloud Task 启动的批处理作业?
如何使用 Spring 和 Hibernate 为 Web 应用程序和批处理作业设置事务