如何在 Spring 数据流服务器中将包含 10 个 Spring 批处理作业的应用程序拆分为 10 个任务?
Posted
技术标签:
【中文标题】如何在 Spring 数据流服务器中将包含 10 个 Spring 批处理作业的应用程序拆分为 10 个任务?【英文标题】:How to split an application containing 10 Spring batch jobs into 10 tasks in Spring data flow server? 【发布时间】:2020-08-30 19:14:24 【问题描述】:我有一个 Spring Boot 批处理作业应用程序,它有大约 10 个作业(数量可能会根据需要增加)。我一直在尝试使用本地服务器设置的 Spring 云数据流服务器来启动和监视这些作业。
但我在这里面临的问题是,在 SCDF 中注册应用程序后,我为注册的应用程序创建任务,并且单个任务本身从应用程序启动所有 10 个作业。虽然我可以看到在单个任务执行中为每个作业创建了单独的作业 ID,但我想知道是否可以为单个 jar 中可用的每个作业创建单独的任务。如果是这样,我该如何实现?
我需要这个,因为很少有作业执行依赖于之前运行的作业的执行状态。下面是我的作业类配置的 sn-p。我的一些工作将在不同的时间间隔运行。因此,即使使用 Cloud Foundry 或 kubernates 来调度作业,我也只能在任务级别进行调度,所有作业都将应用相同的调度间隔。我可能无法为任务中的每个作业应用不同的时间表。我不确定云代工厂和 kubernates 调度部分,但我想这就是它的工作方式。
//Job Config
@Configuration
@EnableBatchProcessing
@EnableTask
public class Job1Loader
@Bean
public Job loadJob1()
return jobBuilderFactory().get("JOb1Loader")
.incrementer(new RunIdIncrementer())
.flow(job01_step01())
.end()
.build();;//return job
//Job Config
@Configuration
@EnableBatchProcessing
@EnableTask
public class Job2Loader
@Bean
public Job loadJob2()
return jobBuilderFactory().get("JOb2Loader")
.incrementer(new RunIdIncrementer())
.flow(job02_step01())
.end()
.build();;//return job
Same goes for other 8 jobs.
谢谢。
【问题讨论】:
【参考方案1】:我想知道是否可以为单个 jar 中可用的每个作业设置单独的任务。如果可以,我该如何实现?
尽管我不建议将所有作业打包在一个 jar 中,但没有什么能阻止您将这种方法与 SCDF 一起使用。您可以为每个作业创建任务定义,并为每个任务配置一个属性以运行特定作业,例如:
--spring.batch.job.names=job1
【讨论】:
您好 Mahmoud,感谢您的回答。它帮助了我。您的建议是有效的。但是,如果有单独的 jar 问题,为每个工作维护单独的项目是个好主意吗?我想将几个相关的工作转换成一个工作和一系列步骤,但是每个工作已经有 4 个以上的步骤,所以认为这会是一个开销。以上是关于如何在 Spring 数据流服务器中将包含 10 个 Spring 批处理作业的应用程序拆分为 10 个任务?的主要内容,如果未能解决你的问题,请参考以下文章
如何在spring jdbc模板中将自动提交设置为false
如何在 Google 数据 Feed 中将增值税包含在产品价格中?