首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring :在CompositeItemWriter中使用步骤前后的方法

Spring :在CompositeItemWriter中使用步骤前后的方法
EN

Stack Overflow用户
提问于 2016-09-26 08:00:49
回答 1查看 8K关注 0票数 3

我需要从db读取数据,然后生成XLSX文件并更新db中的数据。

对读者来说没有问题。对于作者部分,我创建了一个CompositeItemWriter,它由第一个生成XLSX文件的Writer和更新db中数据的第二个Writer组成。

问题:我需要拦截第一个作者的前后步骤,以便能够以块的形式正确地写入XLSX文件。但是,一旦我将两个作者组合到一个CompositeItemWriter中,就不会调用带有@BeforeStep et @AfterStep注释的方法。

当让第一个作者实现StepExecutionListener时,也会出现同样的问题。

知道为什么吗?

下面是CompositeItemWriter的定义、步骤和作者:

代码语言:javascript
复制
public CompositeItemWriter<Adhesion> compositeItemWriter() {
  CompositeItemWriter writer = new CompositeItemWriter();
  writer.setDelegates(Arrays.asList(adhesionToXlsWriter,  adhesionToDbWriter));
  return writer;
}

@Bean
public Step xlsStep(ItemReader<Adhesion> adhesionFromDbReader) {
   return stepBuilderFactory.get(JOB_NAME + "-step")
      .<Adhesion, Adhesion>chunk(10)
      .reader(adhesionFromDbReader)
      .writer(compositeWriter())
      .build();
   }


@Component
public class AdhesionToXlsWriter implements ItemWriter<Adhesion> {

   @BeforeStep
   public void beforeStep(StepExecution stepExecution) {
      // !! never called !!
   }

   @Override
   public void write(List<? extends Adhesion> items) throws Exception {
      // generate XLSX content
   }

   @AfterStep
   public ExitStatus afterStep(StepExecution stepExecution) {
      // !! never called !!
   }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 09:03:12

您需要将XslWriter注册为步骤的侦听器。使用stepBuilder的“侦听器”方法。

如果编写器、读取器、处理器在复合类后面“隐藏”,spring框架将不会自动识别它为侦听器。因此,你必须“手动”去做。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39697529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档