トランザクションコードスプリングの練習

    一般に、トランザクションデータベーストランザクションを指し、それは、完全に実行されるか、まったく実行されない、プログラム実行部としての一連の動作を意味します。トランザクションは、結果指向の基準を決めています。

.spring特性(ACID) 

     (1)。アトミック(不可分)
       アトミック作業の不可分単位です。簡単に言えば、トランザクション内のすべての操作はどちらか含まれている手段はすべて成功するか、すべてがロールバックに失敗します。そのサービスの正常な動作が完全にデータベースに適用されなければならないのであれば、それが失敗した場合は、データベースへの影響を持つことができません。
    (2)一貫性(一貫性)
     の一貫性トランザクションはブックストア実行の実装は、一貫性のある状態でなければなりません前と後と言うことです別の状態へと一貫性のある状態でなければならないようにすることです。その転送、ユーザAとユーザBのお金の両方がAとBの間の転送は、一緒にまたは5000 2つのお金間の取引が終了した後、何度も回すどのように関係なく、5000の合計まで追加しない場合。
    (単離)の(3)分離
     トランザクションの分離は、他のトランザクションの実行を妨害することができません。複数のユーザがテーブルの動作と同時にデータベースにアクセスするとき、各ユーザトランザクションオープン用のデータベース操作は同時トランザクション間の分離のために、他のトランザクションによって妨害されていません。
  (4)。持続性(耐久性)
      持続性は、トランザクションがコミットされると、データベース・データへの変更は永続的であることを意味します。でも、操作が失敗した場合にコミットされたトランザクションデータシステムの場合に失われることはありません。

二.spring分離レベル

*汚れを読む:トランザクションが別のコミットされていないトランザクションからデータを読み込む
非反復可能読み取りを*:トランザクションが別のトランザクションが複数のクエリの一貫性のない結果に(更新)データリードを提出されました読み
トランザクションは、別のものを読んで:Unrealのリード*トランザクションは、一貫性のない結果に複数のクエリに(挿入)データリードを提出されました。

デフォルトの分離レベルのSQLServerとOracleのRC、MySQLのデフォルトの分離レベルがRRです。

3 .springの伝搬特性(7つの事務は、拡散機構を有します)

 コードの春に、私は小さなデモテストを書かれている、トランザクションは拡張することができる最終的な結果を、ログ記録、ならびに、デモの内部に追加して記録する方法。

 ブログの庭は、コードがあまりにも面倒でアップロードしたように、私は、ダウンロードに行くことができるテストのように、CSDNにアップロード。

 URL:https://download.csdn.net/download/zj520_/12064006

四.springノート

1. 出现Exception是无法回滚的,只有抛出RuntimeException和Error异常时才能回滚。 2. 在事务代码中捕获了异常,是无法进行回滚的。
3. 如果是使用的spring+mvc模式。并且spring和mvc都扫描了service层(事务处理层),事务不生效。因为spring会有限加载mvc的配置文件,而事务的配置基本上都是在spring中,因为spring的子容器先于父容器启动,造成在controller中注入service时还没有加载事务。
4. mysql的myISAM引擎,是不支持事务的,需要设置为innoDB模式。
5. 事务的开启必须放到listener里面加载,如果放到dispatchServlet的配置里面,事务不生效。
6. 如果在接口中使用@Transactional,只有JDK动态代理才能生效,CGLIB动态代理是不生效的,因为注解是不能继承的。

五.如果让Exception可以进行回滚呢?

方法1:@Transactional注解指定rollbackFor=Exception.class

方法2:让throw的自定义Exception继承RuntimeException

方法3:使用自定义注解,处理回滚Exception的问题:

@Transactional(rollbackFor=Exception.class)
public @interface DolTransactional {

}

おすすめ

転載: www.cnblogs.com/pluto-charon/p/12128981.html