如何将 JobParameters 传递给 Spring Cloud Task 启动的批处理作业?
Posted
技术标签:
【中文标题】如何将 JobParameters 传递给 Spring Cloud Task 启动的批处理作业?【英文标题】:How to pass JobParameters to a batch job launched by Spring Cloud Task? 【发布时间】:2020-11-19 01:38:55 【问题描述】:我正在尝试通过 Spring Cloud Task 启动参数化 Spring Batch 作业。我的目标是通过命令行启动它,并在作业执行后关闭应用程序。
samples repo 中有一个示例说明如何实现这一点,但这是一个非常简单的工作,没有参数。我在reference documentation 中没有找到我的问题的答案。
--- 编辑:根据迈克尔的问题,我设置了一个简化的示例,它开箱即用。我将研究我的真实示例,同时在此处发布我最初问题的答案---
以下是简化示例:
@Configuration
@EnableTask
@EnableBatchProcessing
public class BatchConfig
private final static Logger log = LoggerFactory.getLogger(BatchConfig.class.getName());
@Autowired
StepBuilderFactory steps;
@Bean
@StepScope
Tasklet helloTasklet(@Value("#jobParameters['name']") String name)
return new Tasklet()
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext)
log.info("Hello ", name);
return RepeatStatus.FINISHED;
;
@Bean
public Step step1(Tasklet helloTasklet)
return steps.get("step1").tasklet(helloTasklet).build();
@Bean
public Job helloJob(JobBuilderFactory jobs, Step step1)
return jobs.get("helloJob")
.incrementer(new RunIdIncrementer())
.start(step1)
.build();
在 pom.xml 中,我有以下依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-task-batch</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
我编译程序并将其作为可执行 jar 运行。我最初的问题是我不知道如何传入作业参数。请参阅我的答案以了解其工作原理。
【问题讨论】:
你是如何尝试启动它的? 我用 cloud-task 启动器创建了一个 springboot 应用程序,使用参数设置了一个批处理作业,然后尝试运行可执行 jar。它启动了作业,但由于我不知道如何提供作业参数而崩溃 请提供您正在运行的确切命令以及您尝试使用的参数的配置。 【参考方案1】:按照我的简化示例,我尝试了以下方法,并且成功了:
java -jar myprogram.jar name=Bob
这会导致以下日志语句:
2020-07-30 22:42:21.927 INFO 3269 --- [ main] com.example.demo.BatchConfig : Hello Bob
【讨论】:
以上是关于如何将 JobParameters 传递给 Spring Cloud Task 启动的批处理作业?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 java config 创建 spring bean 时传递 JobParameters
springbatch 给自定义的processor传递JobParameters中设置的参数
带有 JobParameters 的 Spring Batch SQL 命令