当前位置: 首页 > 知识库问答 >
问题:

Spring Batch跳过异常如何为复合编写器工作

羊新翰
2023-03-14

我正在使用Spring Batch,我的步骤配置如下:

 @Bean
  public Step testStep(
      JdbcCursorItemReader<TestStep> testStageDataReader,
      TestStepProcessor testStepProcessor,
      CompositeItemWriter<Writer> testWriter,
      PlatformTransactionManager transactionManager,
      JobRepository jobRepository) {
    return stepBuilderFactory
        .get("TESTING")
        .<>chunk(100)
        .reader(testStageDataReader)
        .processor(testStepProcessor)
        .writer(testWriter)
        .faultTolerant()
        .skip(DataIntegrityViolationException.class)
        .skipLimit(1)
        .listener(new SkipTestListener())
        .transactionManager(transactionManager)
        .repository(jobRepository)
        .build();
  }

我的复合项目编写器


 @Bean
  public CompositeItemWriter<Writer> testWriter(
      Writer1 writer1,
      Writer2 writer2,
      Writer3 writer3)
      throws Exception {
    List<ItemWriter<? super Writer>> writers = new ArrayList<>();
    writers.add(writer1);
    writers.add(writer2);
    writers.add(writer3);
    CompositeItemWriter<Writer> writers = new CompositeItemWriter<>();
    workingWellDailyMemberAggWriter.setDelegates(writers);
    workingWellDailyMemberAggWriter.afterPropertiesSet();
    return writers;
  }


现在,如果writer1上存在DataIntegrityViolationException,则会在我进行日志记录的地方调用跳过侦听器,然后控制转到下一步

我正在寻找一种方法,将控件转到当前跳过的下一个写入程序

共有1个答案

微生城
2023-03-14

这种类型的编排需要通过您自己的复合编写器来完成。Spring Batch没有现成的组件来处理这样单个组件逻辑中的异常。

 类似资料:
  • 我正在尝试为这样的情况编写测试用例,在这个情况下,我期待的是datatruncation异常,我试图使用assert equals和比较消息来断言相同的情况,但是看起来像是比较两个字符串,有没有更好的方法来为这样的异常编写测试用例。 我正在使用JUnit5

  • 请参考附件截图了解表格结构。 Empd_Id是'employee'表中的主键,该主键与'product'表中的'product_id'一起成为复合键的一部分。任何员工都可以拥有多个产品,因此在这种情况下,“员工-产品”表之间就变成了“一对多”关系。现在我很困惑,是只需要编写1个JpaRepository接口(即为employee编写),还是需要编写2个JpaRepository接口(1个为empl

  • 我阅读了有关自定义异常和as的内容: Thorben建议:https://stackify.com/java-custom-exceptions/#wpautbox_about Baeldung在这里建议:https://www.baeldung.com/java-new-custom-exception 自定义例外应该比原始例外更有益,否则会失去其目的。正当要做到这一点,我们应该始终将可丢弃的原

  • 问题内容: 有没有办法只处理过滤器中的响应。 下面编写的代码是否正确? 问题答案: 这取决于您想要什么。通常,您的样本虽然不正确。之后chain.doFilter又回来了,这是来不及做的任何回应。此时,整个响应已发送到客户端,您的代码无法访问它。 您需要做的是包装request和/或包装response到您自己的类中,将这些包装传递给doFilter方法,并处理包装中的所有处理。 为了使其更容易,

  • 问题内容: 我试图研究应如何精确地编写异步函数。经过大量的文档研究之后,我仍然不清楚。 如何为Node编写异步函数? 如何正确实施错误事件处理? 问我问题的另一种方式是:我应该如何解释以下功能? 问题答案: 您似乎将异步IO与异步功能混淆了。由于非阻塞IO更好,所以node.js使用异步非阻塞IO。理解它的最好方法是去观看ryan dahl的一些视频。 如何为Node编写异步函数? 只需编写普通函

  • 在我的文件中,我有很多服务: nginx mysql 雷迪斯 回声 php ... 但也有一些我与docker compose一起使用的CLI实用程序运行--rm: 工匠 作曲家 npm 当我启动我的系统时,我会编写。不幸的是,这也会尝试启动所有CLI实用程序。有没有办法在我的docker compose中分离这两个类别?