【问题标题】:How to pass JobParameters to a batch job launched by Spring Cloud Task?如何将 JobParameters 传递给 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。它启动了作业,但由于我不知道如何提供作业参数而崩溃
  • 请提供您正在运行的确切命令以及您尝试使用的参数的配置。

标签: spring-boot spring-batch spring-cloud spring-cloud-task


【解决方案1】:

按照我的简化示例,我尝试了以下方法,并且成功了:

java -jar myprogram.jar name=Bob

这会导致以下日志语句:

2020-07-30 22:42:21.927  INFO 3269 --- [           main] com.example.demo.BatchConfig             : Hello Bob

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多