目次
1. 使用シナリオの例
2. チェックされた例外とチェックされていない例外
伝播は 7 つの異なる伝播メカニズムをサポートします:
ホームページ Java &#&チュートリアル Spring の @Transactional トランザクション ロールバックの例とソース コードの詳細な紹介 (写真)

Spring の @Transactional トランザクション ロールバックの例とソース コードの詳細な紹介 (写真)

Mar 30, 2017 am 11:00 AM

1. 使用シナリオの例

@Transactional の使用方法を理解する前に、まず @Transactional が何に使用されるかを知る必要があります。以下に例を示します。 たとえば、ある部門に多数のメンバーがあり、それぞれ部門テーブルとメンバー テーブルに保存されている場合、特定の部門を削除する場合、デフォルトで対応するメンバーが削除されるとします。ただし、この状況は実行時に発生する可能性があります。最初に部門を削除してからメンバーを削除します。ただし、部門は正常に削除されますが、メンバーを削除するときに例外が発生します。現時点では、メンバーの削除に失敗した場合、以前に削除された部門も削除が取り消されることを期待しています。このシナリオでは、@Transactional トランザクション ロールバックを使用できます。

2. チェックされた例外とチェックされていない例外

ここでチェックされた例外とチェックされていない例外の概念を誰もが知っている理由は次のとおりです。チェックされていない例外が発生すると、すべてのデータベース操作がロールバックされます。発生した例外がチェックされた例外の場合、データベース操作はデフォルトで送信されます。

チェック例外:

は無効であり、プログラム内で予測できないことを意味します。たとえば、無効なユーザー入力、ファイルが存在しない、ネットワークまたはデータベースのリンク エラーなどです。これらはすべて外部的な理由であり、プログラム内で制御することはできません。

コードで明示的に処理する必要があります。たとえば、try-catch ブロック処理、または呼び出しスタックの上位層に例外をスローするメソッドに throws 記述を追加します。

java.lang.Exceptionから

を継承します(java.lang.RuntimeExceptionを除く)。

未チェック例外:

はプログラム内のエラー、論理エラーを示します。 IllegalArgumentException、NullPointerException、IllegalStateException などの RuntimeException のサブクラスです。

未チェックの例外を処理するためにコード内で明示的にキャッチする必要はありません。

java.lang.RuntimeException から継承します (および java.lang.RuntimeException は java.lang.Exception から継承します)。

以下の例外構造図を見ると、階層をより深く理解できるかもしれません:

3. @Transactional

の使用例 この例では、Spring の @Transactional トランザクション ロールバックの例とソース コードの詳細な紹介 (写真)Eclipse

+Maven を jar 管理としてのみ使用します。 、たとえ理解できなくても、Maven の友人も読むことができます。

3.1、Spring の 設定ファイル

は、まず次のように tx 名前空間を設定する必要があります:

@Transactional に基づくトランザクション管理を使用するには、Spring で次の設定を行う必要があります:

<bean id="appTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven proxy-target-class="false" transaction-manager="appTransactionManager" />
ログイン後にコピー

博メインの Spring 設定ファイル: Spring の @Transactional トランザクション ロールバックの例とソース コードの詳細な紹介 (写真)




       
     
        
            
               classpath:properties/*.properties
                
            
        
    

    
    
        
        
       
        
            ${jdbc_driverClassName}
        
        
            ${jdbc_url}
        
        
            ${jdbc_username}
        
        
            ${jdbc_password}
        
    

    <bean id="appTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
    </bean>

    <tx:annotation-driven proxy-target-class="false" transaction-manager="appTransactionManager" />

    
    
        
    

    
    
        
          
        
        
    

    
    

ログイン後にコピー

3.2. @Transactional を使用し、

にユーザーを追加し、実装クラスのメソッドにアノテーションを追加します

@Transactional(propagation=Propagation.REQUIRED)
public void addUser(User user) {
    userDao.addUser(user);
    String string  = null;
    if(string.equals("")) {
        int i = 0;
    }
}
ログイン後にコピー

上記のメソッドで意図的に null ポインタ例外を発生させました。ロールバックするには 3.3. ユニットテスト

クラス

@Test  
public void addUserTest(){  
    User user = new User();
    user.setUserName("luoguohui1");
    user.setUserPassword("luoguohui1");
    userService.addUser(user);
}
ログイン後にコピー

を実行すると、挿入できないことがわかりますが、@Transactionalが削除された場合、コードは次のようになりますが、例外が発生しますが、対応するデータは残ります。データベースに追加されました:

3.4 、ソースコードのダウンロード

Spring の @Transactional トランザクション ロールバックの例とソース コードの詳細な紹介 (写真) この記事のプロジェクトは、mybatis エントリ (サンプルチュートリアルとソースコードを含む) に基づいて修正されています。この記事には、データベーススクリプトとソースコードの詳細なプロセスが含まれています。プロジェクトの構築。

4. Spring の @Transactional について理解する必要がある概念 Spring の @Transactional は、動的プロキシ メカニズムに基づいており、開発中に発生した問題を迅速かつ簡単に解決するための透過的なトランザクション管理メカニズムを提供します。

一般的な使用法は、次のコードを通じてメソッド、インターフェース、またはクラスに注釈を付けることです:

@Transactional(propagation=Propagation.NOT_SUPPORTED)
ログイン後にコピー

伝播は 7 つの異なる伝播メカニズムをサポートします:

必須: トランザクションが存在する場合、現在のトランザクションがサポートされます。トランザクションがない場合は、新しいトランザクションを開始します。

サポート: トランザクションが存在する場合は、現在のトランザクションをサポートします。トランザクションがない場合は、非トランザクション実行。ただし、トランザクション同期を使用するトランザクション マネージャーの場合、PROPAGATION_SUPPORTS はトランザクションを使用しない場合とは若干異なります。 NOT_SUPPORTED: 常に非トランザクションで実行し、既存のトランザクションを一時停止します。

REQUIRESNEW: 常に新しいトランザクションを開始します。トランザクションがすでに存在する場合、既存のトランザクションは一時停止されます。

必須: トランザクションがすでに存在する場合、現在のトランザクションがサポートされます。アクティブなトランザクションがない場合、

例外をスローします

NEVER: 常に非トランザクションで実行し、アクティブなトランザクションが存在する場合は例外をスローします。

NESTED: アクティブなトランザクションが存在する場合は、ネストされたトランザクションで実行します。アクティブなトランザクションがない場合は、REQUIREDプロパティに従って実行します。

以下は注意する必要があるいくつかの事項です。必ず読んでください。そうしないと、さまざまな落とし穴に遭遇することになります。ブロガーがあなたに思い出させなかったとは言わないでください:

以下はあなたが必要とするいくつかの事項です注意するには、必ず読んでください。そうでない場合、さまざまな落とし穴に遭遇しても、ブロガーがあなたに思い出させなかったとは言わないでください。そうしないと、さまざまな落とし穴に遭遇した場合でも、ブロガーが通知しなかったとは言わないでください。

トランザクション管理が必要な場所に @Transactional アノテーションを追加します。 @Transactional アノテーションは、インターフェイス定義とインターフェイス メソッド、クラス定義、クラスのパブリック メソッドに適用できます。

以上がSpring の @Transactional トランザクション ロールバックの例とソース コードの詳細な紹介 (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Spring Boot と OpenAI の出会いによる新しいプログラミング パラダイム Feb 01, 2024 pm 09:18 PM

2023年、AI技術が注目を集め、プログラミング分野を中心にさまざまな業界に大きな影響を与えています。 AI テクノロジーの重要性に対する人々の認識はますます高まっており、Spring コミュニティも例外ではありません。 GenAI (汎用人工知能) テクノロジーの継続的な進歩に伴い、AI 機能を備えたアプリケーションの作成を簡素化することが重要かつ緊急になっています。このような背景から、AI 機能アプリケーションの開発プロセスを簡素化し、シンプルかつ直観的にし、不必要な複雑さを回避することを目的とした「SpringAI」が登場しました。 「SpringAI」により、開発者はAI機能を搭載したアプリケーションをより簡単に構築でき、使いやすく、操作しやすくなります。

Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Spring Boot と Spring AI を使用して生成人工知能アプリケーションを構築する Apr 28, 2024 am 11:46 AM

Spring+AI は業界リーダーとして、強力で柔軟な API と高度な機能を通じてさまざまな業界に最先端のソリューションを提供します。このトピックでは、さまざまな分野での Spring+AI の応用例を詳しく掘り下げ、Spring+AI がどのように特定のニーズを満たし、目標を達成し、これらの教訓をより広範囲のアプリケーションに拡張するかを示します。このトピックが Spring+AI の無限の可能性をより深く理解し、活用するきっかけになれば幸いです。 Spring フレームワークはソフトウェア開発の分野で 20 年以上の歴史があり、Spring Boot 1.0 バージョンがリリースされてから 10 年が経過しました。今、その春に異論を唱える人はいない

Springプログラマティックトランザクションの実装方法は何ですか? Springプログラマティックトランザクションの実装方法は何ですか? Jan 08, 2024 am 10:23 AM

Spring プログラムによるトランザクションを実装する方法: 1. TransactionTemplate を使用する; 2. TransactionCallback および TransactionCallbackWithoutResult を使用する; 3. Transactional アノテーションを使用する; 4. TransactionTemplate を @Transactional と組み合わせて使用​​する; 5. トランザクション マネージャーをカスタマイズする。

Java Springでスケジュールされたタスクを実装する方法 Java Springでスケジュールされたタスクを実装する方法 May 24, 2023 pm 01:28 PM

Java によるスケジュールされたタスクの実装 Jdk に付属のライブラリでは、スケジュールされたタスクを実装する 2 つの方法があります。1 つは Timer で、もう 1 つは ScheduledThreadPoolExecutor です。 Timer+TimerTask が Timer を作成すると、TimerTask タスクのスケジュールに使用できるスレッドが作成されます。Timer には 4 つの構築メソッドがあり、Timer スレッドの名前と、それをデーモン スレッドとして設定するかどうかを指定できます。デフォルト名は Timer-number で、デフォルトはデーモン スレッドではありません。主なメソッドは 3 つあります。 cancel(): タスクのスケジュールを終了し、現在スケジュールされているすべてのタスクをキャンセルします。実行中のタスクは影響を受けません。 purge(): タスク キューからタスクを削除します。

Spring Boot と Spring Cloud の違いと関係 Spring Boot と Spring Cloud の違いと関係 Jun 22, 2023 pm 06:25 PM

SpringBoot と SpringCloud は両方とも、開発者がマイクロサービス アプリケーションをより迅速に構築およびデプロイできるようにする Spring Framework の拡張機能ですが、それぞれ異なる目的と機能を持っています。 SpringBoot は、Java アプリケーションを迅速に構築するためのフレームワークであり、開発者は Spring ベースのアプリケーションをより迅速に作成してデプロイできるようになります。スタンドアロンの実行可能な Spring アプリケーションを構築するための、シンプルでわかりやすい方法を提供します。

史上最も強力な組織 Spring で最もよく使用される 7 つのアノテーション! 史上最も強力な組織 Spring で最もよく使用される 7 つのアノテーション! Jul 26, 2023 pm 04:38 PM

テクノロジーの更新と反復により、Java5.0 はアノテーションをサポートし始めました。 Java の主要なフレームワークである Spring は、バージョン 2.5 に更新されて以来、徐々に XML 構成を放棄し始めており、Spring フレームワークを制御するために使用されるアノテーションが増えています。

Spring でトランザクション分離レベルを設定する方法 Spring でトランザクション分離レベルを設定する方法 Jan 26, 2024 pm 05:38 PM

Spring でトランザクション分離レベルを設定する方法: 1. @Transactional アノテーションを使用します; 2. Spring 構成ファイルに設定します; 3. PlatformTransactionManager を使用します; 4. Java 構成クラスに設定します。詳細な導入方法: 1. @Transactional アノテーションを使用し、トランザクション管理が必要なクラスまたはメソッドに @Transactional アノテーションを追加し、属性に分離レベルを設定します。 2. Spring の設定ファイルなどで

Spring Cloud をゼロから学ぶ Spring Cloud をゼロから学ぶ Jun 22, 2023 am 08:11 AM

Java 開発者として、Spring フレームワークを学習して使用することは必須のスキルです。クラウド コンピューティングとマイクロサービスの人気に伴い、Spring Cloud の学習と使用も習得しなければならないスキルになりました。 SpringCloud は、分散システムを迅速に構築するための SpringBoot に基づく開発ツールセットです。サービスの登録と検出、構成センター、負荷分散、サーキット ブレーカーなどの一連のコンポーネントを開発者に提供し、開発者がマイクロ サービスを構築できるようにします。

See all articles