在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编译器错误? 无论如何,吸取教训 – 注意自定义注释行为; 刷新有关最终/开放规则的知识。
- 在kotlin中为Gradle脚本配置IntelliJ自动完成
- Tomcat gradle插件 – 失败的跟踪修改
- 如何把项目的res文件放到同一个文件夹的jar文件中?
- 错误:与依赖项冲突com.google.code.findbugs:jsr305'
- 在org.gradle.testing.jacoco.plugins.JacocoPluginExtension_Decorated找不到属性’run’
- Gradle构建中未解决的Kotlin扩展函数的引用
- 我的Kotlin项目无法解决Travis-CI上的依赖关系
- 在Android Studio中Kotlin构建失败
- 使用Gradle构建一个与Kotlin-DSL相关的jar