ResourceAwareを使用するときにリソース名を設定するために、ドメイン オブジェクトに実装しましたMultiResourceItemReader。Processor でリソース名を正常に取得できました。FlatFileItemWriterただし、を使用して分類した後、ドメインオブジェクトにアクセスできないため、リソース名にアクセスできませんClassifierCompositeItemWriter。どんな助けでも大歓迎です。
構成
stepBuilderFactory.get("enrichmentStep")
.<RecordType, RecordType>chunk(1)
.reader(multiResourceItemReader())
.processor(processor())
.writer(compositeWriter())
.stream(type0Writer())
.stream(type1Writer())
.stream(type2Writer())
ライター
public ClassifierCompositeItemWriter compositeWriter() throws Exception {
ClassifierCompositeItemWriter<RecordType> writer = new ClassifierCompositeItemWriter<>();
SubclassClassifier classifier = new SubclassClassifier<>();
Map typeMap = new HashMap<>();
typeMap.put(RecordType0.class, type0Writer());
typeMap.put(RecordType1.class, type1Writer());
typeMap.put(RecordType2.class, type2Writer());
classifier.setTypeMap(typeMap);
writer.setClassifier(classifier);
return writer;
}
@Bean
public FlatFileItemWriter<RecordType0> type0Writer() throws Exception{
FlatFileItemWriter<RecordType0> writer = new FlatFileItemWriter<>();
writer.setResource( new FileSystemResource("")); //To get the resource value from domain object here
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<RecordType0>() {{
setDelimiter("#");
setFieldExtractor(new BeanWrapperFieldExtractor<RecordType0>() {{
setNames(new String[] { "RecordType", "BatchID", "SubBatchID"});}});}});
return writer;
}