使用Atomikos进行Spring集成事务管理

时间:2017-03-20 08:10:11

标签: java spring-integration spring-transactions jta atomikos

我正在考虑创建一个Spring Integration Spring Boot应用程序

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

使用Atomikos进行事务管理。我的问题是:如果上述配置是事务性的,所有必需的JTA配置都已完成?我也读过某个地方,如果在Spring Integration中创建多个线程,例如使用Splitter,那么上下文将不会进行事务处理。如何克服这个?

2 个答案:

答案 0 :(得分:0)

如果您将轮询器配置为事务性,则只要您不通过QueueChannel$active_group = 'default'; $active_record = TRUE; $db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = ''; $db['default']['database'] = 'test1'; $db['default']['dbdriver'] = 'mysql'; $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'utf8'; $db['default']['dbcollat'] = 'utf8_general_ci'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE; 频道切换到其他线程,流量就会在事务中运行例子)。

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

答案 1 :(得分:0)

Spring Integration对事务有不同的要求,为此,您需要在轮询器metaData中传递事务管理器,例如:

@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**"))