我有一个 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())
)
);
我建议您将
transactional()
移动到源轮询通道适配器的 poller()
配置中 Jpa.inboundAdapter(entityMaanger)
。
现在看来您依赖于默认轮询器(可能由 Spring Boot 自动配置),但您需要有第二个参数
from()
:
IntegrationFlows
.from(
Jpa
.inboundAdapter(entityMaanger)
.entityClass(...)
.nameqQuery(...),
e -> e.poller(p -> p.fixedDelay(1000).transactional())
)