有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring引导JMS什么时候应该在@Transact方法上发送消息?

我想知道,在一个标记为@Transactional的Spring引导方法中,消息应该何时出现在队列上?我这么问是因为我注意到在两个不同的应用程序上有两种不同的行为

这两种应用程序有以下共同点:

  • 基于Spring Boot 2.0
  • JMS消息发送使用的是JmsTemplate,setSessionTransact设置为true
  • 未配置显式事务设置
  • 使用了一个Mongo DB(使用Spring数据),并且正在使用与发送消息相同的方法修改记录

这两种应用之间的主要区别是:

  • 其中一个应用程序有一个JPA数据源(使用Spring Dataj,并使用此方法读取和/或写入记录)。另一个应用程序没有此数据源

观察到的行为不同之处在于,当JPA源存在时,消息会在方法末尾发送。没有它,信息会立即发送

这是预期的行为吗

我可以将应用程序配置为以同样的方式运行吗?理想情况下,我希望消息在最后发送(因此任何失败的Mongo更改都会取消消息发送并回滚任何JPA更改)?我意识到Mongo的变化不是任何交易的一部分

谢谢


共 (0) 个答案