我正在考虑创建一个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,那么上下文将不会进行事务处理。如何克服这个?
答案 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**"))