启动时覆盖Spring Data Flow的作业参数

问题描述 投票:1回答:1

我目前在Spring Cloud Data Flow中的任务调用方面遇到问题。

我有一个在SCDF上注册的Spring Batch(包含单任务步骤作业)应用程序,并且基于该应用程序定义了任务。在首次启动此任务期间,我使用了几个作业参数/自变量。由于我现在知道的原因,我以后所有的启动都将其参数替换为我使用的第一组参数。

我使用的是SCDF 1.4.0 + MSSQL数据库,但是使用SCDF 1.3.2 + H2或MSSQL也会发生相同的行为。

BatchConfig.java

    @Configuration
    public class BatchConfig {

        @Autowired
        TaskletStep taskletStep;

        @Autowired
        public JobBuilderFactory jobBuilderFactory;

        @Autowired
        public StepBuilderFactory stepBuilderFactory;


        @Bean
        public Step step1() {
            return stepBuilderFactory.get("step1")
                    .tasklet(taskletStep)
                    .build();
        }

        @Bean
        public Job job() throws Exception {
            return jobBuilderFactory.get("job")
                    .incrementer(new RunIdIncrementer())
                    .start(step1())
                    .build();
        }
}

TaskletStep.java:

@Configuration
@StepScope
public class TaskletStep  implements Tasklet{


    @Value("#{jobParameters['filePath']}")
    private String filePath;

    @Value("#{jobParameters['informante']}")
    private String informante;

    @Autowired
    RemessaParser remessaParserService;

    @Override
    public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
        GICLogger.info("Recebido job com path: " + filePath + " para o informante "+ informante);
        try{
            Path remessa = Paths.get(filePath);
            if(Files.exists(remessa)){
                String idRemessa = remessaParserService.remessaReader(remessa, informante);
                GICLogger.info("### TaskletStep:" + idRemessa + " é o ID da Remessa!");
                return RepeatStatus.FINISHED;
            }else{
                GICLogger.error("Não foi possível encontrar a remessa em "+filePath);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return RepeatStatus.FINISHED;
    }
}

我的启动命令:

dataflow> task launch negTask --arguments "filePath=/tmp/jars/remessa.txt informante=CaixaB --spring.cloud.task.closecontext_enable=false"

应用程序日志:

2018-04-04 13:33:28 [main] INFO c.b.g.n.BatchNegativacaoApp-已开始在13.938秒内完成BatchNegativacaoApp(JVM运行14.599)

2018-04-04 13:33:28 [main]信息o.s.b.a.b.JobLauncherCommandLineRunner-运行默认命令行使用:[filePath = / tmp / jars / remessa.txt,informante = Caixa,--spring.cloud.task.closecontext_enable = false,--spring.cloud.task.executionid = 17]

2018-04-04 13:33:28 [main] INFO o.s.b.c.l.support.SimpleJobLauncher-作业:[SimpleJob:[name = job]]使用以下参数启动:[{filePath = / home / enrico / PROJETOS / GIC / java / remessa.txt,-spring.cloud.task.executionid = 8,informante = Caixa,-spring.cloud.task.closecontext_enable = false,run.id = 12,时间= 1522842134819}]

你们是否知道为什么会发生?

感谢您的关注和任何投入!

最好的问候,恩里科

spring spring-batch spring-cloud-dataflow spring-cloud-task
1个回答
2
投票

嗨,恩里科,我是相似性问题,请尝试一下,如果它能正常工作。

@Bean
@Qualifier("load")
public Job load(JobCompletionNotificationListener listener, Step step1, 
@Qualifier("stepValidation") Step stepValidation) {
    return jobBuilderFactory.get("load")
            .incrementer(new SampleIncrementer())
            .listener(listener)
            .flow(stepValidation)
            .next(step1)
            .end().build();
}

public class SampleIncrementer implements JobParametersIncrementer {

    public JobParameters getNext(JobParameters parameters) {
        if (parameters==null || parameters.isEmpty()) {
            return new JobParametersBuilder().addLong("run.id", 1L).toJobParameters();
        }

        long id = parameters.getLong("run.id",1L) + 1;
        return new JobParametersBuilder().addLong("run.id", id)
            .toJobParameters();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.