Java Springトランザクションロールバックの詳細説明
Springトランザクションロールバック
1. 発生した問題
1つのメソッドで複数のデータベース保存操作を行うと、中間のデータベース操作でエラーが発生します。疑似コードは次のとおりです:
public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(Person2); }
予想される状況: エラーが発生する前のすべてのデータベース保存操作はロールバックされ、保存されません
通常の状況: 前のデータベース操作が実行され、すべてのデータベース操作エラーが開始されますエラー発生以降はデータ保存に失敗します。これは私たちが望む結果ではないはずです。
この状況に遭遇した場合、Spring トランザクションを使用してこの問題を解決できます。
2. 例外の基本知識
1) 例外アーキテクチャ
例外の継承構造: Throwable は基本クラスであり、Error と Exception は Throwable を継承し、RuntimeException と IOException は Exception を継承します。 Error および RuntimeException とそのサブクラスは非チェック例外 (未チェック) になり、その他の例外はチェック例外 (チェックあり) になります。
2) エラー例外
エラーは、プログラムの実行中に非常に深刻で回復不可能なエラーが発生したことを示します。この場合、アプリケーションは、JAVA 仮想マシンのエラーなど、操作を終了することしかできません。 Error はチェックされていない例外であり、コンパイラは Error が処理されたかどうかをチェックしないため、プログラム内で Error タイプの例外をキャッチする必要はありません。通常の状況では、プログラム内で Error タイプの例外がスローされるべきではありません。
3) RuntimeException
Exception には、RuntimeException およびその他の非 RuntimeException 例外が含まれます。
RuntimeException は Unchecked Exception であり、プログラムが RuntimeException を処理するかどうかをコンパイラがチェックしないことを意味します。プログラム内で RuntimException 型の例外をキャッチする必要はなく、メソッド本体で RuntimeException クラスを宣言する必要もありません。 。 RuntimeException が発生した場合は、プログラム内でプログラミング エラーが発生したことを意味するため、RuntimeException をキャッチするのではなく、エラーを見つけてプログラムを変更する必要があります。
4) チェック済み例外
チェック済み例外。これはプログラミングで最もよく使用される例外でもあり、Exception から継承され、RuntimeException ではないすべての例外がチェック済み例外、IOException、および ClassNotFoundException です。 JAVA 言語では、チェックされた例外を処理する必要があると規定されており、コンパイラはこれをチェックし、メソッド本体でチェックされた例外を宣言するか、catch ステートメントを使用してチェックされた例外を処理用にキャプチャします。それ以外の場合は、コンパイルできません。
3. 例
ここで使用されるトランザクション構成は次のとおりです:
<!-- Jpa 事务配置 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory"/> </bean> <!-- 开启注解事务 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
Spring 構成ファイルで、データ ソースのdefaultAutoCommit が True に設定されている場合、メソッドが例外をキャッチすると、トランザクションはたとえば、設定ファイルにそのようなレコードがある場合、このパラメータが設定されていないことがわかります。自動的に送信されますか? 答えは「いいえ」です。データベース接続プールとして com.alibaba.druid.pool.DruidDataSource を使用します。以下にソース コードを示します
。
状況 1: 例外がプログラムで手動でキャッチされない場合<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="xxx" value="xxx"/> <property name="xxx" value="xxx"/> .... <property name="defaultAutoCommit" value="true" /> </bean>

@Transactional(rollbackOn = { Exception.class }) public void test() throws Exception { doDbStuff1(); doDbStuff2();//假如这个操作数据库的方法会抛出异常,现在方法doDbStuff1()对数据库的操作 会回滚。 }
トランザクションを手動でロールバックするには、次のように記述するだけです:
@Transactional(rollbackOn = { Exception.class }) public void test() { try { doDbStuff1(); doDbStuff2();//假如这个操作数据库的方法会抛出异常,现在方法doDbStuff1()对数据库的操作 不会回滚。 } catch (Exception e) { e.printStackTrace(); } }
読んでいただきありがとうございます!ありがとう!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

データベースクエリにTKMYBATISを使用する場合、クエリ条件を構築するためにエンティティクラスの変数名を優雅に取得する方法は一般的な問題です。この記事はピン留めします...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。
