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

注意:パターンがどの程度具体的であるか、およびパッケージ情報を含めるかどうか(必須ではありません)を慎重に検討してください。たとえば、「例外」はほぼすべてに一致し、おそらく他のルールを非表示にします。「例外」がチェックされたすべての例外のルールを定義することを意図していた場合、「java.lang.Exception」は正しいでしょう。「BaseBusinessException」などのより珍しい例外名では、完全にパッケージ修飾された名前を使用する必要はありません。

だからあなたは使用してみることができます"org.springframework."。ただし、これが文書化されているようには見えません。Springの文書には、rollback-forがコンマで削除された形式であると記載されているだけです。

ロールバック-ロールバックをトリガーする例外の場合。カンマ区切り。たとえば、com.foo.MyBusinessException、ServletException

于 2012-12-01T14:09:18.927 に答える