我的交易没有在春天提交,我遇到了一个奇怪的问题。在对数据库进行概要分析之后,看起来spring在启动之前提交了该事务吗?
以下是我看到的分析器..
SQL:BatchStarting select 1
SQL:BatchCompleted select 1
SQL:BatchStarting IF @@TRANCOUNT > 0 COMMIT TRAN
SQL:BatchCompleted IF @@TRANCOUNT > 0 COMMIT TRAN
RPC:Completed exec vbosv_DLLVersion_Update 77,N'15',NULL,N'12.2.2.1',N'12.2.3.4'
在这种情况下没有提交事务,但如果我在此之后运行一段代码再次调用数据库,它将提交上一个事务。我认为它正在提交,因为它以IF @@TRANCOUNT > 0 COMMIT TRAN
开头。
我使用了声明式事务管理,这里有一些我的配置
<!-- Transactional Advice -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="process*" rollback-for="Throwable"/>
<tx:method name="write*" rollback-for="Throwable"/>
<tx:method name="upload*" rollback-for="Throwable"/>
<tx:method name="store*" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="dataServicesOperation" expression="execution(* com.enterprise.dataservices.DataServicesImpl.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="dataServicesOperation"/>
</aop:config>
我是一个春天的新手,有点迷失在这里发生的事情。非常感谢和帮助!
答案 0 :(得分:2)
你有关于junit测试方法的@Rollback(false)
吗?