Spring集成:Jpa出站适配器的错误处理

9lowa7mx  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(96)

我有一个Spring Integration流,它使用Jpa.inboundAdapter()作为源,在transform中操作读取的实体,最后使用Jpa.outboundAdapter再次存储它们。
但是,在持久化期间,可能会发生异常(唯一约束冲突)。在这种情况下,流会“挂起”,因为它以指定的顺序从源读取,立即触发相同的顺序。
如何正确地进行错误处理,以标记或跳过从源代码读取的“坏”实体?
流程:

IntegrationFlows
  .from(
     Jpa
      .inboundAdapter(entityMaanger)
      .entityClass(...)
      .nameqQuery(...)
      .get()
  )
  .split()
  .transform( ..)
  .handle(
     Jpa
       .outboundAdapter(entityManager)
       .entityClass(...)
       .persistMode(MERGER)
       .flush(true)
       .get(),
     e -> e.transactional())
   )
);
yc0p9oo0

yc0p9oo01#

我建议您将transactional()移动到该Jpa.inboundAdapter(entityMaanger)的源轮询通道适配器的poller()配置。
现在看起来你依赖于默认的poller(可能是Sping Boot 自动配置的),但是你需要在from()上有第二个arg:

IntegrationFlows
  .from(
     Jpa
      .inboundAdapter(entityMaanger)
      .entityClass(...)
      .nameqQuery(...),
     e -> e.poller(p -> p.fixedDelay(1000).transactional())
  )

相关问题