如何将 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 命令

为啥使用注解在 ItemProcessor 中找不到 jobParameters?

java 页面怎样给main方法传递参数

如何将数组传递给另一个活动?