如何使用通配符在Spring中指定回滚?

时间:2012-12-01 13:07:18

标签: java spring spring-aop spring-jdbc

我在Spring中有以下代码 -

<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" rollback-for="org.springframework.dao.DataAccessException" no-rollback-for="java.lang.IndexOutOfBoundsException"
                timeout="30" />
        </tx:attributes>
    </tx:advice>

此配置将回滚DataAccessException及其所有子例外。即回滚异常层次结构。但是我希望能够回滚一组异常(不属于同一层次结构)。是否有可能写出像

这样的东西
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" rollback-for="org.springframework.*" no-rollback-for="java.lang.*"
                timeout="30" />
        </tx:attributes>
    </tx:advice>

我已经尝试了上面的代码,但它不起作用。

2 个答案:

答案 0 :(得分:1)

不,你不能使用通配符,但是

   <tx:method name="*" propagation="REQUIRED" rollback-for="org.springframework" no-rollback-for="java.lang" />

会做你想要的。如果Exception类名称包含模式,则匹配为正。

答案 1 :(得分:0)

Spring通常使用普通子字符串作为异常匹配模式。

例如,RollbackRuleAttribute javadoc

  

注意:仔细考虑模式的具体程度,以及是否   包括包裹信息(不是强制性的)。例如,   “例外”几乎可以匹配任何东西,并且可能会隐藏其他内容   规则。如果意味着“异常”,“java.lang.Exception”将是正确的   为所有已检查的异常定义规则。更不寻常   诸如“BaseBusinessException”之类的异常名称不需要使用   一个完全包装限定的名称。

因此您可以尝试使用"org.springframework."。但是,它似乎没有记录,Spring文档只提到 rollback-for 具有逗号分隔格式。

  

rollback-for 触发回滚的异常;逗号分隔。例如,com.foo.MyBusinessException,ServletException