gpt4 book ai didi

java - 我想将步骤 1 中的数据传递给步骤 2 的读取器

转载 作者:行者123 更新时间:2023-12-01 18:27:25 26 4
gpt4 key购买 nike

我使用 Spring Batch 来执行以下工作流程:

  • 第 1 步:读取大型 CSV 并将其放入 map
  • 第 2 步:根据上一张 map ,我必须执行业务逻辑。

我创建了一个名为 CourseCsvRepository 的 bean,以便将映射的 csv 保存到此映射(单例 bean):

@Component
public class CourseCsvRepository {

private Map<String, List<Course>> courseMappedByKey = new HashMap<>();


public void addToMap(Course course){

String key = "";
key= key.concat(String.valueOf(course.getCodeStifLigne())).concat(course.getAntenne()).concat(String.valueOf(course.getIdtm())).concat(String.valueOf(course.getIdmiss())).concat(String.valueOf(course.getCourse())).concat(course.getNommiss());

if(courseMappedByKey.containsKey(key)){
courseMappedByKey.get(key).add(course);
}else {
final ArrayList<Course> list = new ArrayList<>();
list.add(course);
courseMappedByKey.put(key, list);
}
}

public Map<String, List<Course>> getMap(){
return this.courseMappedByKey;
}

public List<Course> getByKey(String key){
return this.courseMappedByKey.get(key);
}


}

我的第二个读者(第2步)如下:

@Bean
public ItemReader<List<Course>> readFromMap(){

ListItemReader<List<Course>> reader = new ListItemReader<List<Course>>(new ArrayList(courseCsvRepository.getMap().values()));

return reader;
}

但 courseCsvRepository.getMap() 总是返回 null,因为我的 bean 是在执行步骤 1 之前创建的(用于填充我们的 map )

@Bean
public Job writeCsvToDbJob() {
return jobBuilderFactory.get("writeCsvToDbJob")
.incrementer(new RunIdIncrementer())
.start(step1())
.next(step2())
.build();
}

最佳答案

我想与您分享上一个问题的答案:

我的bean需要是步骤范围的,以便它们能够在每一步接收stepExecutionContext参数。如果它们不是步骤范围,则它们的 bean 将首先创建,并且不会接受步骤级别的填充映射。

@StepScope: How Does Spring Batch Step Scope Work

@Bean
@StepScope
public ItemReader<List<Course>> readFromMap(){

ListItemReader<List<Course>> reader = new ListItemReader<List<Course>>(new ArrayList(courseCsvRepository.getMap().values()));

return reader;
}

关于java - 我想将步骤 1 中的数据传递给步骤 2 的读取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210719/

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