Spring 使用 Atomikos 的集成事务管理

Spring Integration Transaction management using Atomikos

我正在考虑创建一个 Spring 集成 Spring 引导应用程序到

1-Poll messages from a DB
2-Do some processing on it
3-Publish messages to EMS Queue

使用 Atomikos 进行交易管理。我的问题是:如果上面的配置是事务性的,并且完成了所有必需的 JTA 配置?我也在某处读到,如果在 Spring 集成中创建了多个线程,例如,使用拆分器,那么上下文将不会是事务性的。如何克服这个问题?

如果您将轮询器配置为事务性的,只要您不移交给另一个线程(通过 ExecutorChannelQueueChannel 通道,例如)。

添加拆分器不会破坏事务边界,因为每个拆分都将在同一线程上处理。

Spring 集成对事务有不同的要求,要做到这一点需要在轮询器元数据中传递一个事务管理器,例如:

@Bean
    public PollerMetadata pollerMetadata() throws  NamingException   {
        return Pollers.fixedDelay(Long.valueOf(env.getProperty("poller.interval")))
                .transactional(**transactionManager**).get();
    }

 @Autowired
     private PlatformTransactionManager **transactionManager**;

并放置:

@InboundChannelAdapter(channel = "jpaInputChannel", poller = @Poller(value = "**pollerMetadata**"))