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 集成中创建了多个线程,例如,使用拆分器,那么上下文将不会是事务性的。如何克服这个问题?
如果您将轮询器配置为事务性的,只要您不移交给另一个线程(通过 ExecutorChannel
或 QueueChannel
通道,例如)。
添加拆分器不会破坏事务边界,因为每个拆分都将在同一线程上处理。
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**"))
我正在考虑创建一个 Spring 集成 Spring 引导应用程序到
1-Poll messages from a DB 2-Do some processing on it 3-Publish messages to EMS Queue
使用 Atomikos 进行交易管理。我的问题是:如果上面的配置是事务性的,并且完成了所有必需的 JTA 配置?我也在某处读到,如果在 Spring 集成中创建了多个线程,例如,使用拆分器,那么上下文将不会是事务性的。如何克服这个问题?
如果您将轮询器配置为事务性的,只要您不移交给另一个线程(通过 ExecutorChannel
或 QueueChannel
通道,例如)。
添加拆分器不会破坏事务边界,因为每个拆分都将在同一线程上处理。
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**"))