spring-boot - Spring Integration JMS - Spring 代码确实在 RuntimeException 上提交
问题描述
我想向经验丰富的 Spring Integration 开发人员甚至代码作者询问我在代码中遇到的奇怪行为。问题是 Spring Code 在我的 RuntimeException 上执行 COMMIT。所以这是我的设置:
1. 我有使用配置的标准 JMS 入站通道适配器
<jms:message-driven-channel-adapter />
我有实现 Best effort 1PC 模式的事务管理器 - 在 Spring 中可用的一个,ChainedTransactionManager。
我在简单的测试流程中使用消息,其中 JMS 入站适配器仅发布到直接通道,并通过一个转换器端点将转换后的消息发布到另一个直接端点,其中作为 ServiceActivator 的处理程序故意抛出我的应用程序异常,该异常扩展了 RuntimeException。
现在,当我调试整个流程以及单步执行 Spring 内部代码时,我总是在配置的事务管理器调用 COMMIT 的地方结束,因此我的 ChainedTransactionManager 也会执行 COMMIT,尽管我正在模拟错误并因此清除回滚场景。回滚方法中的断点根本没有命中。
我有什么错?
现在我再次浏览了代码,甚至 Spring 代码将状态设置为 RollbackOnly 并执行一些异常处理程序,但最后它仍然成功并最终调用提交行,如屏幕截图所示,chainedTransactionManager 指示其本地 TM承诺以及。
我希望有一些我无法发现的细节/错误:) 谢谢!
类 .m2\repository\org\springframework\spring-jms\5.2.3.RELEASE\spring-jms-5.2.3.RELEASE-sources.jar!\org\springframework\jms\listener\AbstractPollingMessageListenerContainer.java 的屏幕截图
解决方案
推荐阅读
- ios - 合并:将 Closure 转换为 Publisher
- unity3d - 如何在 Unity 中的静态图像上创建可滚动蒙版?
- javascript - 运行使用 chrome.runtime.getURL() 获取的 html 文件的脚本和 css
- ansible - Ansible Jinja2 模板仅替换配置文件的几行?(Jinja2 模板没有覆盖目标文件的全部内容)
- json - 如何在 React JS 中切换单个元素的内容?
- amazon-web-services - 我们可以从 SSM 参数存储中检索值并将其作为输入传递给 AWS step 函数吗?
- r - 由于“尺度”而无法安装 ggplot2
- mysql - [MYSQL][正则表达式] 解析字符串并从中构造一些信息 ini mysql
- mocha.js - 如果条件不匹配,则 Mocha 从之前的函数中退出
- cmake - 使用 cmake 编译 cppfile 时如何获取位码?