我在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>
我已经尝试了上面的代码,但它不起作用。
答案 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