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

问题描述 投票:0回答:1

我有一个 Spring 集成流程,它使用 Jpa.inboundAdapter() 作为源,在转换中操作读取的实体,最后使用 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())
   )
);



java spring spring-integration spring-integration-dsl
1个回答
0
投票

我建议您将

transactional()
移动到源轮询通道适配器的
poller()
配置中
Jpa.inboundAdapter(entityMaanger)

现在看来您依赖于默认轮询器(可能由 Spring Boot 自动配置),但您需要有第二个参数

from()
:

IntegrationFlows
  .from(
     Jpa
      .inboundAdapter(entityMaanger)
      .entityClass(...)
      .nameqQuery(...),
     e -> e.poller(p -> p.fixedDelay(1000).transactional())
  )
© www.soinside.com 2019 - 2024. All rights reserved.