春のサービス@Transactionalコメント

物事のやり方を注意:@Transactional

クラスの場合は、プリカーソル、トランザクション処理のためのクラスラベルは、すべてのメソッド、例です:

1 @TransactionalパブリッククラスTestServiceBeanは} {TestServiceを実装します

ときに、特定の物事の方法は、クラスを必要としない場合には:

コードをコピー

1 @Transactional   
 2パブリッククラスTestServiceBeanはTestService {実装
 3プライベートTestDaoのDAOを。
 4公共ボイドsetDao(TestDaoのDAO){ 
 = DAO 5 this.dao。
 6} 
 7 @Transactional(伝播= Propagation.NOT_SUPPORTED)
 8パブリックリストのgetAll(){ 
 9リターンヌル。
10} 
11}

コードをコピー

 

物事のはじめに伝播行動: 

  @Transactional(伝播= Propagation.REQUIRED):トランザクションがある場合は、そのトランザクションが追加され、そうでない場合は、新たな(デフォルト)
  @Transactional(伝播= Propagation.NOT_SUPPORTED):コンテナは、このメソッド総務ために開いていない
  @Transactional(伝播=伝播.REQUIRES_NEW):トランザクションがあるかどうか、新しいトランザクションを作成するには、オリジナルの新しい完成ハング、古いトランザクションを続行
  @Transactional(伝播= Propagation.MANDATORY):既存のトランザクションで実行する必要がありますそうでない場合は、例外がスローされ
  @Transactional(伝播= Propagation.NEVER):そうでない場合は、例外がスロー(およびPropagation.MANDATORY反対)され、取引されていない実行しなければならない
  @Transactional(伝播= Propagation.SUPPORTS):あなたは、この他のBeanを呼び出す場合この方法は、トランザクションを使用し、その後、トランザクション内の他のBeanで宣言した。他のBeanはトランザクションが宣言されていない場合は、それが業務を持っていないでしょう。

 

物事は、設定をタイムアウト:

  @Transactional(タイムアウト= 30)//デフォルトは30秒です

 

トランザクション分離レベル:

  @Transactional(分離= Isolation.READ_UNCOMMITTED):コミットされていないリード(ダーティ・リードは、リードを省略する)は、実質的に使用していない
  @Transactional(分離= Isolation.READ_COMMITTEDを):コミットされたデータを読み取る(読み取りと省略する魔法の読み取り)
  @Transactional(= Isolation.REPEATABLE_READ分離):反復可能読み取り(ファントムを発生読む)
  @Transactional(= Isolation.SERIALIZABLE分離):直列化されました

  MYSQL:デフォルトはREPEATABLE_READレベルで
  SQLSERVER:デフォルトのREAD_COMMITTED

ダーティ・リード  :別の更新コミットされていないトランザクションのためのデータを読み取るためのトランザクション
またとない読み取り  :同じトランザクション内で、同一のデータを繰り返し読み出し結果が返され、換言すれば、異なる 
後続の読み取りがさらに読み取ることができます更新データのトランザクションが同じトランザクション内で逆に「反復可能読み取り」を複数回提出された
読み出しデータは、別のトランザクションを読まれていない後続の読み取りがで提出されたデータに更新していることを確認するために、データを読み取るために
ファントム読み取り  :トランザクションを挿入し、別のトランザクションが提出されたデータを読み取ります

 

@Transactional注釈一般的に使用されるパラメータ説明

パラメーター名

機能説明

読み取り専用

読み取り専用の真、偽のために提供される。このプロパティは、現在のトランザクションが読取り専用トランザクションであるかどうかを設定するために使用されている、と述べた書き込み可能、​​デフォルトはfalseです。例えば:@Transactional(読み取り専用=真)

rollbackFor

この属性は、メソッド指定された例外例外は、トランザクションがロールバックされ、配列を投げたときに、必要な配列のロールバック例外クラスを設定するために使用されます。例えば:

1つの例外クラスを指定します。@Transactional(rollbackFor = RuntimeException.class)

複数の例外クラスを指定:@Transactional(rollbackFor = {RuntimeException.class、Exception.class})

rollbackForClassName

このプロパティは、アレイの例外クラス名を設定するために使用される方法は、トランザクションがロールバックされ、配列名を投げ例外例外を指定したときにロールバックする必要があります。例えば:

1つの例外クラス名を指定します。@Transactional(rollbackForClassName =「のRuntimeException」)

例外クラス名を複数指定:@Transactional(rollbackForClassName = { "のRuntimeException"、 "例外"})

noRollbackFor

このプロパティは、メソッドは、配列、ロールバックなしトランザクションを投げ例外例外を指定する場合、配列は、例外クラスのロールバックである必要はなく、設定するために使用されます。例えば:

1つの例外クラスを指定します。@Transactional(noRollbackFor = RuntimeException.class)

複数の例外クラスを指定:@Transactional(noRollbackFor = {RuntimeException.class、Exception.class})

noRollbackForClassName

このプロパティは、方法は、ロールバックのためのトランザクションを配列の名前でスロー例外例外を指定しない配列、のロールバック例外クラス名を設定する必要はありません。例えば:

1つの例外クラス名を指定します。@Transactional(noRollbackForClassName =「のRuntimeException」)

複数の例外クラスの名前を指定します。

@Transactional(noRollbackForClassName = { "のRuntimeException"、 "例外"})

伝搬

このプロパティは、特定の値は、表6-7を参照して、トランザクションの伝播を設定するために使用されています。

例如:@Transactional(伝播= Propagation.NOT_SUPPORTED、読み取り専用=真)

隔離

トランザクション分離レベルは、複数のトランザクションを同時に処理するために、基礎となるデータベース、トランザクション分離レベルのプロパティを設定するために使用され、デフォルトの分離レベルは、一般的にデータベースを使用することができ、設定するための基本的な必要性

タイムアウト

このプロパティは、トランザクションのタイムアウトを秒単位で設定するために使用され、-1の既定値は、無期限に示します

 

 

注意点:


  エラー@Transactionalないマークされた場合、トランザクションのパブリックのみ、その他の非公共の道のための方法にも適用することができますが、この方法は、トランザクション機能ではありません@。1、

  2、春とトランザクションマネージャ、春には、データベースのための責任がありますオープン、デフォルトの出会いの実行時例外をロールバック、コミット()(「注意事項」を新しいのRuntimeExceptionをスロー;)。ロールバックされ、その出会いの例外がチェックされていない(オフ)ロールバックするとき、遭遇する必要が例外をキャプチャします(つまり、言った例外または異常によって検査異常呼にコンパイラのチェックによってスローされた非実行時例外である)検査中のその出会いの例外、ロールバックされません。((「注」)新しい例外を投げます)私たちは聞かせてチェックされない例外がロールバックされない場合は@Transactional(rollbackFor = {Exception.class、他の異常を})を追加し、すべての例外がロールバックされたトランザクションのロールバックを作るために方法を指定する必要がある場合:. @Transactional(notRollbackFor = RunTimeException.class)
次のように:

コードをコピー

1 @Transactional(rollbackFor=Exception.class) //指定回滚,遇到异常Exception时回滚
2 public void methodName() {
3    throw new Exception("注释");
4 }
5 @Transactional(noRollbackFor=Exception.class)//指定不回滚,遇到运行期例外(throw new RuntimeException("注释");)会回滚
6 public ItimDaoImpl getItemDaoImpl() {
7    throw new RuntimeException("注释");
8 }

コードをコピー

  3、@Transactional 注解应该只被应用到 public 可见度的方法上。 如果你在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错, 但是这个被注解的方法将不会展示已配置的事务设置。


  4、@Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。然而,请注意仅仅 @Transactional 注解的出现不足于开启事务行为,它仅仅 是一种元数据,能够被可以识别 @Transactional 注解和上述的配置适当的具有事务行为的beans所使用。上面的例子中,其实正是 元素的出现 开启 了事务行为。


  5、春のチームの勧告では、特定の@Transactionalコメント(メソッドまたはクラス)クラスを使用することですが、達成するために、任意のインターフェイスクラスには使用しないでください。もちろん、インターフェイスに@Transactionalアノテーションを使用することができますが、エージェントインターフェースベースの場合に有効になるように、それを設定した場合、これはのみとなります。注釈はプロキシを使用している場合は、クラスベースのことを意味し、継承されませんので、確認する(トランザクションがプロキシクラスに基づいて認識されず設定し、演技ではありませんオブジェクトが満載重度)。そのため、春のチームの勧告や、特定のクラスに@Transactionalコメントを受け入れてください。

オリジナルリンク:https://www.cnblogs.com/caoyc/p/5632963.html

おすすめ

転載: blog.csdn.net/xiaomojun/article/details/82424797