【问题标题】:Spring Boot JMS only transactions supportSpring Boot JMS 仅支持事务
【发布时间】:2015-07-01 12:23:39
【问题描述】:

我正在编写一个服务,我需要为 JDBC 和 JMS 使用事务,但不是分布式的。是否可以在 JMS 侦听器方法上使用 Spring @Transactional 注释,用于仅使用 Bitronix 或 Atomikos 的 JMS 事务,因为这两个也是自动配置的春天?

据我所知,当我添加这个依赖时,我的数据库事务也变成了XA。

我有什么选择?

【问题讨论】:

    标签: spring spring-boot spring-transactions spring-jms


    【解决方案1】:

    【讨论】:

    • 好的,但是我需要设置spring.datasource.xa.dataSourceClassName= 属性,并且,我正在使用MSSQL DB,它给出了错误:javax.transaction.xa.XAException: com.microsoft.sqlserver.jdbc.SQLServerException: Could not find stored procedure 'master..xp_sqljdbc_xa_recover,因为没有为XA 配置Db。我想要的是启用 2 个事务管理器,1 个用于 JMS,1 个用于 JDBC。如有必要,我可以键入事务管理器的名称。我只是好奇默认情况下是否可能,或者在添加 Bitronix 或 Atomikos 之后,我认为这是必要的,我能做些什么来实现这一点?
    • 或者,我首先需要这个吗?如果我得到异常,即使没有事务,JMS 端会发生什么?它是否重试消息,我正在使用持久队列?
    • 您可以在入站侦听器容器上只使用本地事务 (acknowledge="transacted"),它只会使用本地 JMS 事务(不需要 @Transactional 或事务管理器)。
    • 非常感谢。这正是我所需要的。
    • JMSListener 没有 acknowledge="transected" 属性。另外, sessionAcknowledgeModeName 和 sessionTransacted 有什么区别?我相信将这些参数添加到 JMSProperties 中会更好,以便 spring-boot 可以自动配置它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2020-10-28
    • 2011-09-20
    • 2018-11-23
    相关资源
    最近更新 更多