gpt4 book ai didi

java - Spring Batch 延迟步骤初始化

转载 作者:行者123 更新时间:2023-12-02 11:07:32 25 4
gpt4 key购买 nike

我有一个包含两个步骤的 Spring Batch 作业。第一个下载文件,第二个处理该文件。问题是第二步在第一步运行之前不知道文件的名称是什么。

该作业已自动实例化这些步骤,因此可以在需要时运行。我想不出任何方法来确保该步骤在第一步运行后初始化。

这是代码:

    @Bean
public Job insertIntoDbFromCsvb(){
return jobs.get("Insert Entity Records Job")
.incrementer(new RunIdIncrementer())
.listener(new InsertRecordListener())
.start(downloadFileStep())
.next(insertIntoDBStep())
.build();
}

@Bean
ItemProcessor<Entity, Entity> csvEntityProcessor() {
return new EntityItemProcessor();
}

@Bean
public Step insertIntoDBStep(){
return steps.get("Insert Entity Records Step")
.<Entity, Entity>chunk(500)
.reader(csvFileReader())
.processor(csvEntityProcessor())
.writer(itemWriter())
.build();
}

@Bean
public Step downloadFileStep(){
return steps.get("Download File Step")
.tasklet(new DownloadFileTasklet("https://leidata-preview.gleif.org/storage/golden-copy-files/2018/06/14/49694/20180614-0000-gleif-goldencopy-lei2-golden-copy.csv.zip",
fileDao,
FileAction.INIT_ENTITY,
this))
.allowStartIfComplete(true)
.build();
}

@Bean
public FlatFileItemReader<Entity> csvFileReader(){
System.out.println("file name: " + fileName);
FlatFileItemReader<Entity> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data/"+this.fileName));
reader.setStrict(false);
reader.setLinesToSkip(1);
reader.setLineMapper(lineMapper());

return reader;
}

您可以看到 reader.setResource(new ClassPathResource("data/"+this.fileName)); 采用我在 Tasklet 中设置的局部变量 fileName第一步。

最佳答案

后期绑定(bind)由 Spring Batch 处理,您必须将 bean 的范围设置为 step

使用 XML:

<bean id="myReader" scope="step"...>

使用 Java(在 bean 声明上设置注释):

@StepScope

文档:https://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html#step-scope

关于java - Spring Batch 延迟步骤初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com