GMs*_*soF 1 java spring transactional spring-transactions
@Transactional
public void setSomething(String name) { ... }
Run Code Online (Sandbox Code Playgroud)
很抱歉问这个非常基本的问题,Spring事务注释是如此强大但却难以理解.根据上面的代码,我没有rollbackFor控制权,这意味着,如果有异常,这个事务上下文将不会回滚.但是根据我以旧方式覆盖事务块的经验,如果没有异常回滚,commit将被跳过并导致(Oracle)数据库的表被锁定(挂起,其他用户无法提交他们的SQL).Spring会不会使用相同的问题rollbackFor吗?
默认的/ @ Transactional设置是:
所以在你的情况下,如果你有一个RuntimeException,这将被回滚.
但通常仅仅告诉您使用@Transactional注释来注释您的类是不够的,将@EnableTransactionManagement添加到您的配置中.
您可以准确配置哪些Exception类型标记用于回滚的事务,包括已检查的异常.以下XML代码段演示了如何为已检查的特定于应用程序的Exception类型配置回滚.
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" rollback-for="NoProductInStockException"/>
<tx:method name="*"/>
</tx:attributes>
Run Code Online (Sandbox Code Playgroud)
或者带注释
@Transactional(rollbackFor=NoProductInStockException.class)
Run Code Online (Sandbox Code Playgroud)
您可以在此处找到详细的文档:http: //docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/transaction.html
希望有所帮助.
在rollbackFor和相关参数进行微调.如果省略它们,则默认行为是回滚RuntimeExceptions.其他异常不执行回滚,并且将提交对数据库所做的任何更改.
事务已提交或回滚,@Transactional方法无法导致未终止的事务(至少在正常操作中).
| 归档时间: |
|
| 查看次数: |
4384 次 |
| 最近记录: |