【问题标题】:How do I support passing a unique job name via environment variable to a Spring Batch Job?如何支持通过环境变量将唯一的作业名称传递给 Spring Batch 作业?
【发布时间】:2018-08-11 22:48:04
【问题描述】:

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

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

  @Bean
    public Job jobParametersJob() {

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

    }

【问题讨论】:

    标签: spring-batch aws-batch


    【解决方案1】:

    我最终通过使用实现 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();
    
        }
    

    【讨论】:

    • 您说的是I'm not currently passing in any job parameters,但我认为这比使用JobParametersIncrementer 更好。在您的情况下,您没有“增加”任何参数(这反映在您的实现中,该实现将 s3filekey 添加为作业参数而不使用 jobParameters 参数)。由于 S3 文件密钥是唯一的,因此使用密钥作为作业参数是 IMO 一个不错的选择,例如 java -jar myjob.jar s3filekey= s3filevalue,然后您可以将该值作为环境变量传递给 docker 映像的入口点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2021-05-29
    相关资源
    最近更新 更多