0

我在春天有以下代码 -

<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>

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

4

2 回答 2

1

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

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

会做你想做的。Exception如果类名包含该模式,则匹配是肯定的。

于 2012-12-01T14:03:54.910 回答
0

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

例如,RollbackRuleAttribute javadoc

注意:仔细考虑模式的具体程度,以及是否包含包信息(这不是强制性的)。例如,“例外”几乎可以匹配任何东西,并且可能会隐藏其他规则。如果“Exception”旨在为所有检查的异常定义规则,则“java.lang.Exception”将是正确的。对于更不寻常的异常名称,例如“BaseBusinessException”,无需使用完全包限定的名称。

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

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

于 2012-12-01T14:09:18.927 回答