我有一个需要配置的 spring 批处理作业 . 从某种意义上说,它应该能够根据传递的内容读取不同的文件并构建阅读器,并且可能每个不同的阅读器都有自己的编写器 . 下面的例子读取一个文件,然后调用它的编写器 . 如何使load_area.txt成为动态的 .
@Bean
public Step orderStep() {
return stepBuilderFactory.get("loadAStep")
.<FieldSetter, FieldSetter> chunk(3)
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
@Bean
public FlatFileItemReader<FieldSetter> reader() {
FlatFileItemReader<FieldSetter> reader = new FlatFileItemReader<FieldSetter>();
reader.setResource(new ClassPathResource("load_a.txt"));
reader.setLineMapper(new DefaultLineMapper<GenericFieldSetter>() {{
setLineTokenizer(new DelimitedLineTokenizer("|") {{
setNames(new String[] { "sCode","cName"});
}});
setFieldSetMapper(new BeanWrapperFieldSetMapper<FieldSetter>() {{
setTargetType(FieldSetter.class);
}});
}});
return reader;
}
@Bean
public ItemWriter<GenericFieldSetter> writer() {
return new LoadAreaItemWriter();
}
load_a.txt 22 | RRR
load_b.txt aa | ABCDED | 123 | 0000
我想在运行时读取load_a.txt或load_b.txt,具体取决于传递的内容并编写自己的编写器 . 它有可能是.txt或任何类型 .
FieldSetter.java有setter和getter
1 回答
您可以使用
jobExecutionContext
/stepExecutionContext
动态传递文件名 . 你的bean应该有@StepScope
.这是你如何访问
jobExecutionContext
/stepExecutionContext