[9] springboot速く学ぶ。@Transactional注釈構成トランザクション管理を使用して

入門

データベーストランザクションのspringbootの使用は非常に便利です、ちょうど@Transactional注釈が可能な方法で追加します。春はトランザクション管理のための機能豊富なサポートを提供します。春のトランザクション管理は、プログラムおよび宣言二つの方法に分けられます。プログラムによるトランザクションは、符号化することによって実現したトランザクションを指し、文のトランザクションベースのAOP、および特定のビジネストランザクション処理ロジックのデカップリングを。ステートメントのトランザクション管理ロジックは、サービスコードが汚染されていないになり、そしてより多くの持つため、実用的で宣言的トランザクション。

トランザクションのアノテーションを使用します

トランザクション注釈が使用することは非常に簡単です、ちょうど上記の適切な方法でトランザクションのアノテーションを特定する必要があります。

簡単な例を以下により注釈トランザクションの使用方法を示しています

@Transactional
@Override
public void addUser() {
 User user1 = new User();
 user1.setUsername("happyjava1");
 user1.setPassword("123456");
 userRepo.save(user1);
 int i = 1 / 0;
 User user2 = new User();
 user2.setUsername("happyjava2");
 user2.setPassword("123456");
 userRepo.save(user2);
}

ここでは、例外を経由して、その後、プログラムの1/0を二人のユーザーを保存します。試験法による試験:

@Test
public void testTx() {
 userService.addUser();
}

データベースは、物事がで働いていることを示し、このレコードをuser1がされていない場合。

[高速] @Transactional注釈の構成トランザクション管理springboot学びます

結果は、エラーを実行することが期待されます。

[高速] @Transactional注釈の構成トランザクション管理springboot学びます

データベースもjappyjava1このフィールド。説明トランザクション注釈作業。

トランザクションのアノテーションの設定はnoRollbackForによる異常ロールバックしません。

例外を設定することができませんロールバックトランザクションの注釈が発生します。例えば、私はトランザクションをロールバックしないでArithmeticExceptionを指定し、トランザクション・ノートで次のプロパティを追加します。

@Transactional(noRollbackFor = ArithmeticException.class)

再度、テストメソッドを実行します。

[高速] @Transactional注釈の構成トランザクション管理springboot学びます

それでもエラーが、データベースをチェックし、USER1このレコードは、データベースに挿入されています。

[高速] @Transactional注釈の構成トランザクション管理springboot学びます

繁殖行動を通じてトランザクション属性の伝播を設定します

トランザクションの伝播、デフォルト値がPropagation.REQUIRED。次のように手動でトランザクションの異なる伝搬動作を指定することができます。

  • Propagation.REQUIRED

現在のトランザクションが存在する場合、それはトランザクションに追加されたトランザクションが現在存在しない場合は、新たなビジネスを作成します。

  • Propagation.SUPPORTS

現在のトランザクションが存在する場合は、トランザクションに追加され、トランザクションが現在存在しない場合は、非トランザクションモードで実行し続けます。

  • Propagation.MANDATORY

現在のトランザクションが存在する場合は、トランザクションに追加され、トランザクションが現在存在しない場合は、例外がスローされます。

  • Propagation.REQUIRES_NEW

現在のトランザクションが存在する場合は、新しいトランザクションを再作成し、現在のトランザクションを中断。

  • Propagation.NOT_SUPPORTED

これは、現在のトランザクションが存在する場合、現在のトランザクションを中断し、非トランザクションとして実行されます。

  • Propagation.NEVER

これは、現在のトランザクションが存在する場合は、例外がスローされ、非トランザクションとして実行されます。

  • Propagation.NESTED

ない場合は、新しいトランザクションを作成します。その場合、現在のトランザクション内の他の事項を入れ子。

アイソレーション特性設定トランザクション分離レベルによって

トランザクション分離レベル、デフォルト値のIsolation.DEFAULTが、これはデータベースの分離レベルに関係しています。次のように、分離レベルをカスタマイズすることができます。

  • Isolation.DEFAULT
  • Isolation.READ_UNCOMMITTED
  • Isolation.READ_COMMITTED
  • Isolation.REPEATABLE_READ
  • Isolation.SERIALIZABLE

トランザクション伝播の挙動との分離レベルは、チュートリアルのコースspringbootとしてこの記事を議論しないように当分の間、より抽象的なものであり、他のフォローアップは、記事を書く時間が探求んがあります。

タイムアウトプロパティ

トランザクションタイムアウトは、デフォルト値は-1です。あなたが時間を設定した場合は、時間制限を超えたが、トランザクションが完了していない、それが自動的にトランザクションをロールバックします。

概要

この記事は、唯一のトランザクションの注釈、高速なコンフィギュレーション・トランザクション管理によってspringbootについて説明します。話を明確に、関連する記事を説明springbootに配置されるべきではない場合は、データベースのトランザクションは、非常に複雑なもので、フォローアップが更新されますスペース、取引に関連する事柄についてのみ話。

おすすめ

転載: www.cnblogs.com/happy4java/p/11205807.html