【发布时间】:2021-09-25 11:29:21
【问题描述】:
我正在使用 MultiResourceItemReader 来读取设置为 Resource[] 的多个资源,并且通过使用 Fixed Length Tokenizer 我可以将数据设置为 POJO 类。 在项目处理器中,我能够获取项目阅读器创建的对象,并能够从对象中获取数据。
我面临的挑战是获取已创建或处理并传递给项目处理器的特定对象的文件名。
我需要将文件名连同特定对象数据一起存储到数据库中。
感谢您的帮助,谢谢
*这里是批量配置*
@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;
}
【问题讨论】:
标签: java spring-boot spring-batch spring-batch-admin