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

我正在用尽想法

当我运行在indellij和gradle理念插件应用应用插件:’想法’ )时,我的春季启动应用程序表现良好。 一旦我从build.gradle中移除插件,它的行为与使用java -jar app.jar执行的应用程序的行为类似 – 下面的描述存在细微但重要的区别。

我有以下情况,由于某些exception,当前tx失败,tx被标记为仅回滚,exception被捕获,并且其处理包括使用TransactionSynchronizationManager.registerSynchronization (new tx)注册后续tx恢复活动。

代码工作正常与思想插件intellij,当我删除插件声明或运行与java -jar注册过程(后tx失败任务)的弹簧启动jar失败,例外:

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,如果它很重要。 有任何想法吗?

UPDATE

我觉得有一种竞争条件,因为在调试模式,即使没有理念的插件,应用程序的行为如预期(注册过程成功)。

我解决了我的问题,根本原因是相当令人惊讶的…

显然,正确处理自定义Spring注释存在问题。 应该打开一个新事务的方法不是用标准的@Transactional注释来注释,而是用自定义的,特定于应用程序的注解(@Transactional和自定义tx设置)。 调试会话显示新的tx没有打开。 而已! 内联自定义注释几乎解决了一个问题。 我发现的另一个缺陷是一个function不开放 ,很奇怪,因为function不是交易入口点(索姆进一步调用)。

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