【发布时间】:2016-06-12 06:31:21
【问题描述】:
我有一个使用 DefaultMessageListener 容器的带有 spring JMS 的 spring boot 应用程序。我正在使用 Atomikos 进行事务管理。 在异常情况下,消息队列回滚工作正常,消息确实移动到回退队列,但数据库更新不会回滚。我已经在 DefaultMessageContainerBean 上设置了自动配置的 JtaTransactionManager。这里是否需要任何其他配置才能获得真正的全局事务管理。我正在使用 My Batis 作为数据库。
public class CusListener implements MessageListener{
public void onMessage(Message message) {
//Database call
catch (Exception ex) {
throw (new RuntimeException());
}
}
}
@Configuration
public class ListenerContainer{
@Bean
public DefaultMessageListenerContainer defaultMessageListenerContainer(ConnectionFactory queueConnectionFactory,MQQueue queue, MessageListener listener,
JtaTransactionManager jtaTransactionManager) {
DefaultMessageListenerContainer defaultMessageListenerContainer =
new DefaultMessageListenerContainer();
defaultMessageListenerContainer.setConnectionFactory(queueConnectionFactory);
defaultMessageListenerContainer.setDestination(queue);
defaultMessageListenerContainer.setMessageListener(listerner);
defaultMessageListenerContainer.setTransactionManager(jtaTransactionManager);
defaultMessageListenerContainer.setSessionTransacted(true);
defaultMessageListenerContainer.setConcurrency("3-10");
return defaultMessageListenerContainer;
}
//other beans declaration passed in the method above
}
@Configuration
public class PlanListenerSqlSessFac {
@Bean(name="sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") NMCryptoDataSourceWrapper dataSource) throws Exception {
}
@Bean(name="driverManagerDataSource")
public DriverManagerDataSource driverManagerDataSource() {
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
return driverManagerDataSource;
}
}
【问题讨论】:
-
不看代码很难知道发生了什么。
-
下面的 JMS anb DB 交互代码需要相当多的标准 bean:-
-
添加了问题代码。
标签: spring spring-boot mybatis spring-jms atomikos