Spring AOP事務管理

4944 ワード

まずビーンを配置して事務マネージャと呼ぶ必要があります.DataSourceTransactionager、ハイベルナーTransation Managerなどがあります.そしてtx:adviceラベルで事務を配置します.txはtranspactionの略記です.事務の属性を定義します.伝播、隔離レベル、読み書き、タイムアウト、異常.最後にaop方式で追加トランザクションの接点を配置します.
    <!--       -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    <!--    -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="query*" read-only="true" />
            <tx:method name="find*" read-only="true" />
        </tx:attributes>
    </tx:advice>
    <!--         -->
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* *..service..*.*(..))"/>
    </aop:config>
<tx:method/>タグの属性
name:メソッド名のマッチングモードは、モードに応じてマッチを探す方法を通知します.propagation:事務定義に用いる伝播レベルを設定します.isolation:事務の隔離レベルを設定します.timeout:指定されたトランザクションのタイムアウト(秒).read-only:この属性はtrueであり、これは読み取り専用のno-rollback-forであることを示しています.カンマで区切られた異常クラスのリストで、ターゲット方法はこれらの異常を飛び出すことができます.通知のロールバックバックバックバックバックバックバックバックバックバックバックバックバックバックバックバックバックバックバックを実行することはできません.デフォルトでは、リストが空ですので、no-rollback-forリストにない任意の運転時に異常が発生します.
isolation隔離レベル
ISO LATION_DEFAULTデフォルトレベル(多くのデータベースにとってはISO LATIONUREADUCOMMITTED)ISO LATION_READ_UNCOMMITTEDの最も低い隔離レベル.事実上、私達はレベルを隔離してはいけません.事務が完成する前に、他の事務所が修正したデータを見ることができます.他の事務所に提出する前に、他の事務所の修正も見られます.ISO LATION_READ_COMMITTEDのほとんどのデータベースのデフォルトレベル.事務が完了する前に、他の事務所のデータを見ることができませんでした.残念なことに、この事務が提出された後に、他の事務所に挿入されたアップデートのデータを確認することができます.これは、他の事務でデータを修正すると、異なるデータが見られます.ISO LATION_REPEATABLE_READのこの隔離レベルは、特定のデータセットを事務で調べたら、少なくとも同じデータセットを再確認することができます.他の事務で調べたデータを修正しても大丈夫です.しかし、他の事務に新しいデータが挿入されたら、新たに挿入されたデータを調べることができます.ISO LATION_SERIALIZABLEは価格が一番大きくて、信頼性が一番高い隔離レベルです.すべての仕事は私が順番に一つ一つ実行します.
プロモーション伝播行為
PROPAAGATION_REQUIREDは現在、もし事務があれば、Springはこの事務を使用します.そうしないと新しいビジネスが始まります.PROPAAGATION_SUPPORTSは現在、事務があれば、Springはこの事務を使用します.そうでないと新しいビジネスは開けません.PROPAAGATION_MANDATORYは現在、もし事務があれば、Springはこの事務を使用します.異常が発生します.PROPAAGATION_REQUIRES_NEW Springはいつも新しい仕事を始めます.現在、事務があれば、当該事務は保留されます.PROPAAGATION_NOT_SUPPORTED Springは、トランザクションのコードを実行しません.コードは常に非事務環境で実行され、当期に事務があれば当該事務は保留される.PROPAAGATION_NEVERは現在、業務があっても、Springは飛事務環境で実行されます.現在、事務があれば、異常を投げます.PROPAAGATION_NESTEPは、現在のトランザクションがあれば、ネストトランザクションで実行します.もしないなら、実行状況とPROPAAGATION_REQUIREDと同じです
Spring AOP実行式execution形式
execution(modifiers-pattern?ret-type-pattern?name-pattern(param-pattern)throws-pattern?)
modifiers-patternはpublic、protectedなどを表し、省略は任意を表します.ret-type-patternは戻り値タイプを表します.省略できません.*で任意にマッチします.declaring-type-patternはパッケージパスとクラス名を表し、省略すれば任意を表します.name-patternはメソッド名を表します.省略できません.*で任意にマッチします.param-patternはパラメータを表しますが、省略できません.throws-patternは異常を表し、省略は任意を表す.
一般的な切り込み点式の例を示します.execution(public*.)任意の公共方法execution(*.)のいずれかの名前が「set」で始まる方法execution(*comy.xyz.service.AcceountService.*(.)AccentServiceインターフェースで定義されている任意の方法exviction.exvice.exyzvice.exyzvice.sevice.sevice.exyzvice.sevice.sevice.exyzvice.sevice.exyzvice.exyzvice.sevice.service.service.sevice.exy)serviceパッケージまたはそのサブパッケージで定義される任意の方法