gpt4 book ai didi

spring-boot - 在intellij中运行并执行jar时的微妙差异

转载 作者:行者123 更新时间:2023-12-03 05:51:36 24 4
gpt4 key购买 nike

我的想法不多了...

当我在indellij中运行它时,我的spring boot应用程序运行良好,并且应用了 gradle idea插件(应用插件:'idea')。
一旦我从build.gradle中删除了插件,其行为就类似于使用java -jar app.jar执行的应用程序一样-存在细微但重要的区别,如下所述。

我有以下情况,当前的tx由于某些异常而失败,tx被标记为仅回滚,捕获了异常,并且其处理包括向TransactionSynchronizationManager.registerSynchronization(新tx)注册tx恢复 Activity 。

当我删除插件声明或使用java -jar注册过程运行spring boot jar(后发TX失败任务)时,代码在intellij中使用idea plugin可以正常工作,但失败并出现异常:

Caused by: java.lang.IllegalStateException: Transaction synchronization is not active
at org.springframework.transaction.support.TransactionSynchronizationManager.registerSynchronization(TransactionSynchronizationManager.java:291) ~[spring-tx-4.3.10.RELEASE.jar!/:4.3.10.RELEASE]

顺便说一句,如果重要的话,代码在kotlin中。
有任何想法吗?

更新

我认为存在某种竞争状况,因为在 Debug模式下,即使没有创意插件,该应用程序的行为也符合预期(注册过程成功)。

最佳答案

我解决了我的问题,根本原因令人惊讶。

显然,正确处理自定义Spring注释存在问题。
本应打开新事务的方法未使用标准@Transactional注释进行注释,而是使用了特定于应用程序的自定义注释(具有自定义tx设置的@Transactional)。调试 session 显示没有打开新的TX。而已!内联自定义注释几乎解决了一个问题。
我检测到的另一个缺陷是一个未打开的函数,这很奇怪,因为该函数不是事务入口点(进一步调用som)。

Kotlin编译器错误?
无论如何,吸取的教训-注意自定义注释的行为;刷新有关决赛/公开赛规则的知识。

关于spring-boot - 在intellij中运行并执行jar时的微妙差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47443471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com