如何解决如何将文件名输入到 spring 批处理的项目阅读器或项目处理器?
我正在使用 MultiResourceItemReader 来读取设置到 Resource[] 的多个资源,并且通过使用 Fixed Length Tokenizer 我能够将数据设置到 POJO 类。 在 Item Processor 中,我能够获取由 Item Reader 创建的对象,并能够从对象中获取数据。
我面临的挑战是获取已创建或处理并传递给项目处理器的特定对象的文件名。
感谢您的帮助,谢谢
*这里是批量配置*
@Configuration
@EnableBatchProcession
public class BatchConfig {
@Value("")
private Resource[] resource;
/* Job */
public Job job(){
return jobBuilderFactory.get("job").listerner(listener()).incrementer(new
RunIdIncrementer())
.start(step()).build();
}
/* Step */
public Step step(){
return stepBuilderFactory.get("step")<mypojo,mypojo>chunk(10)
.reader(multiREsourceItemReader()).processor(processor()).writer(writer()).build();
}
/* Multi Resource Item Reader */
@Bean
@StepScope
public MultiResourceItemReader<mypojo> multiResourceItemReader() {
MultiResourceItemReader<mypojo> multireader = new MultiResourceItemReader<mypojo>();
multireader.setResource(resources);
multireader.setDelegate(reader());
return mutlireader;
}
/* Flat FIle Item Reader */
@Bean
public FlatFileItemReader<mypojo> reader() {
FlatFileItmeReader<mypojo> reader = new FlatFileItemReader<mypojo>();
reader.setLineMapper(new DefaultLineMapper() {
{
setLinetokenizer(new FixedLengthTokenizer(){ {
setName(new String[]{"my pojo class attributes ..."});
setColumns( new Range { new Range[1,3] .....});
setStrickt(false);
}
});
setFieldSetMapper(new BeanWrapperFieldsSetMapper<mypojo>(){
{
settargettype(AckResponse.class):
}
}); }});
return reader;
}
@Bean
public Customitemprocessor processor(){
return new ResponseFileProcessor();
}
@Bean
public CustomFileWriter<mypojo> writer(){
return new CustomFileWriter<mypojo>();
}
}
/ 这是项目处理器/
public class CustomProcessor implements itemprocessor<mypojo,mypojo>{
public mypojo process(mypojo item) thows Exception {
return item;
}
解决方法
我已经通过在 Spring Batch 中使用 ResourceAware 接口找到了解决方案。 Mypojo 需要实现 ResourceAware 并重写 setResource 方法,我们可以在那里获取 Resource 详细信息。
关于 ResourceAware :https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/item/ResourceAware.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。