Java JMS和JDBC之间是否需要单独的事务管理器?
当JDBC事务中的错误导致将JMS消息返回队列时,我遇到了一个问题,我想是的。这意味着某些消息正在被再次处理 我的应用程序具有下一个配置:Java JMS和JDBC之间是否需要单独的事务管理器?,java,spring,spring-jdbc,spring-transactions,spring-jms,Java,Spring,Spring Jdbc,Spring Transactions,Spring Jms,当JDBC事务中的错误导致将JMS消息返回队列时,我遇到了一个问题,我想是的。这意味着某些消息正在被再次处理 我的应用程序具有下一个配置: 我已将JtaTransactionManager配置为: 在我的例子中,当我收到JMS消息时,在我的代码逻辑中发生org.springframework.dao.DataIntegrityViolationException。我通过try-catch块处理异常,我希望一切都会好起来。但在这一次,正如我所看到的,消息返回到队列并再次被处理。如果在我的代码中发生
谢谢 创建异常的代码在哪里?您如何处理您的异常?您是如何配置JDBC和数据源的?您使用JDBC模板吗?创建异常的代码在哪里?您如何处理您的异常?您是如何配置JDBC和数据源的?您使用JDBC模板吗?
...
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<tx:jta-transaction-manager/>
....
@Bean
public DefaultMessageListenerContainer jmsContainer(ConnectionFactory connectionFactory, PlatformTransactionManager transactionManager, ....) throws NamingException {
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setSessionTransacted(true);
container.setTransactionManager(transactionManager);
....
return container;
}