Spring Batch ResourceAware - получить имя ресурса в ClassifierCompositeItemWriter

Я реализовал ResourceAware в моем доменном объекте, чтобы установить имя ресурса при использовании MultiResourceItemReader. Я успешно могу получить имя ресурса в процессоре. Однако я не могу получить доступ к имени ресурса в 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;
}

0 ответов

Другие вопросы по тегам