この記事では、Spring のトランザクション管理設定におけるアノテーションの使用方法を主に紹介します。編集者が非常に優れていると考えたので、参考として共有します。エディターに従って見てみましょう
使用手順:
ステップ 1. Spring 構成ファイルに cc2c39e2370aac9d3896793edbbe786f 名前空間を導入します
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
ステップ 2. @Transactional アノテーションを持つ Bean は自動的に次のように構成されます宣言型トランザクションのサポート
<!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="defaultTransactionManager" proxy-target-class="true" />
ステップ 3. インターフェイスまたはクラスの宣言に @Transactional を記述します。
インターフェイスにのみ記述する場合、インターフェイスの実装クラスをオーバーライドできます。クラス宣言時の設定
@Transactional //クラスレベルのアノテーション、クラス内のすべてのパブリックメソッドに適用可能
トランザクションの伝播動作と分離レベル
誰もがSpringアノテーションを使用しています 従来のトランザクション管理を使用する場合、トランザクションの伝播動作と分離レベルについて少し混乱するかもしれません。簡単に参照できるように、以下に詳細を示します。
Thing アノテーション メソッド: @Transactional
クラスの前にマークすると、クラス内のすべてのメソッドがトランザクション処理を実行することを示します。 例:
@Transactional public class TestServiceBean implements TestService {}
クラス内の一部のメソッドがトランザクションを必要としない場合:
@Transactional public class TestServiceBean implements TestService { private TestDao dao; public void setDao(TestDao dao) { this.dao = dao; } @Transactional(propagation = Propagation.NOT_SUPPORTED) public List<Object> getAll() { return null; } }
物事 伝播動作の概要:
@Transactional(propagation=Propagation.REQUIRED)
トランザクションが存在する場合はトランザクションに参加し、存在しない場合は新しいトランザクションを作成します(デフォルト)
@ Transactional(propagation=Propagation.NOT_SUPPORTED)
コンテナはこのメソッドのトランザクションを開きません
@Transactional(propagation=Propagation.REQUIRES_NEW)
トランザクションが存在するかどうかに関係なく、新しいトランザクションが作成されます。新しいトランザクションが実行された後、古いトランザクションは継続されます。 @Transactional(propagation=Propagation.NEVER)
は既存のトランザクションで実行する必要があります トランザクションで実行されます。そうでない場合は例外がスローされます(Propagation.MANDATORYの反対)
@Transactional(propagation=Propagation.SUPPORTS)
他の Bean がこのメソッドを呼び出し、他の Bean でトランザクションを宣言する場合は、トランザクションを使用します。他の Bean がトランザクションを宣言しない場合、
Thing のタイムアウト設定は必要ありません:
( timeout=30) //デフォルトは30秒です
トランザクション分離レベル:
@Transactional(isolation = Isolation .READ_UNCOMMITTED)
@Transactional(isolation = Isolation.READ_COMMITTED)
コミットされたデータの読み取り(反復不可能な読み取りが発生します)およびファントム読み取り)
@Transactional(isolation = Isolation.REPEATABLE_READ)
反復可能な読み取り(ファントム読み取り)が発生します)
@Transactional(isolation = Isolation.SERIALIZABLE)
シリアル化
ダーティ リード: 1 つのトランザクションがコミットされていない更新データを読み取ります別のトランザクションから
読み取られるデータは同じであること、つまり、後続の読み取りでは、別のトランザクションによって送信された更新データを読み取ることができないことを保証できます
ファントム読み取り: 1 つのトランザクションが、送信された挿入データを読み取ります別のトランザクションによる
readOnly | この属性は、現在のトランザクションがトランザクションであるかどうかを設定するために使用されます読み取り専用トランザクション。読み取り専用を示す場合は true、読み取り/書き込みを示す場合は false に設定します。デフォルト値は false です。例: @Transactional(readOnly=true) | ||||||||||||||
rollbackFor | この属性は、指定された例外配列内の例外がスローされたときにロールバックする必要がある例外クラス配列を設定するために使用されます。メソッドを実行すると、トランザクションはロールバックされます。例: | ||||||||||||||
複数の例外クラスを指定します: @Transactional(rollbackFor={RuntimeException.class, Exception.class}) |
表続き)
|
以上がSpring のトランザクション管理設定におけるアノテーションの使用例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。