我如何支持通过环境变量将唯一作业名称传递给 Spring 批处理作业?

How do I support passing a unique job name via environment variable to a Spring Batch Job?

我刚刚开始使用 Spring Batch。我正在使用带有 Docker 图像的 AWS Batch 开发命令行启动器。尝试对作业实例命名进行排序。

在 jobBuilder 中对以下文字字符串使用 @Value 是否可以接受?本质上,我正在传递 S3 文件键,这些键已经是唯一值,因为我有一个任务在我的 FlatFileReader 运行之前抓取文件。目标是在因失败而需要时促进对作业的重试。

  @Bean
    public Job jobParametersJob() {

        return jobBuilderFactory.get("PassedInValue")
                .start(step1())
                .next(step2())
                .next(step3())
                .build();

    }

我最终通过使用实现 JobParametersIncrementer 的作业增量器解决了问题。请注意,在我的例子中,我目前没有传递任何作业参数,所以这是在这里设置它们,因为我的参数目前只是通过环境变量传递给 docker 容器。

public class JobIncrementer implements JobParametersIncrementer {

@Value("${s3filekey}")
String s3filekey;

@Override
public JobParameters getNext(JobParameters jobParameters) {
    return new JobParametersBuilder().addString("s3filekey",s3filekey).toJobParameters();

}...//then in job configuration...

    @Bean
    public Job jobParametersJob() {

        return jobBuilderFactory.get("jobParametersJob")
                .incrementer(jobIncrementer)
                .start(step1())
                .next(step2())
                .next(step3())
                .build();

    }