spring声明回滚的例子?

时间:2010-10-07 11:58:24

标签: java spring transactions aop

想在spring aop ........

中使用声明式事务管理示例

其实

             

<aop:config>
    <aop:advisor advice-ref="addAdvice" pointcut="execution(* com.DAO.*.*(..))"/>
</aop:config>
<tx:advice id="addAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" rollback-for="" />
    </tx:attributes>
</tx:advice>

所以这里我想写的实际上是rollback-for =“”,有什么方法或其他吗? 如果方法那么该方法放在哪里?

2 个答案:

答案 0 :(得分:5)

rollback-for中指定例外的名称。例如,如果要回滚your.pkg.NoProductInStockException,则编写

rollback-for="your.pkg.NoProductInStockException"

如果遇到与指定匹配的异常,这将使事务回滚。如果抛出的异常不匹配,则会将其传播到服务的调用者或包含在TransactionRolledBackException

The transaction documentation解释说:

  

向Spring Framework的事务基础结构指示事务的工作将被回滚的推荐方法是从当前在事务上下文中执行的代码中抛出异常。 Spring Framework的事务基础结构代码将捕获任何未处理的异常,因为它会使调用堆栈冒泡,并确定是否将事务标记为回滚。

     

在默认配置中,Spring Framework的事务基础结构代码仅在运行时未经检查的异常情况下标记用于回滚的事务;也就是说,抛出的异常是RuntimeException的实例或子类。 (错误也将 - 默认情况下 - 导致回滚)。从事务方法抛出的已检查异常不会导致在默认配置中回滚。

     

您可以准确配置哪些Exception类型标记用于回滚的事务,包括已检查的异常。

答案 1 :(得分:0)

默认情况下,不应对未经检查的异常执行此操作。如果在方法中抛出未经检查的异常,则必须使用rollback-for属性。您可以使用正则表达式样式,例如:* InStockException