目次
トランザクション
トランザクションの特性
特性が満たされていない場合に発生する問題
質問を読む
書き込み問題
読み取り問題の解決
トランザクション分離レベルの設定
PROPAGATION_REQUIRED 内にあることを確認します。メソッド B がメソッド A を呼び出し、メソッド A にトランザクションがある場合、メソッド B は A のトランザクションを使用します。 A にトランザクションがない場合、B はトランザクションを作成します
PROPAGATION_REQUIRES_NEW 内にないことを確認します。A にトランザクションが存在します。A トランザクションを一時停止します。 、B の開かれたトランザクションには独自の操作のみが含まれます。 A にはトランザクションが存在せず、B によって作成されたトランザクションには独自の操作のみが含まれています
宣言型トランザクション管理: Spring 構成ファイルで宣言的にトランザクションを処理する コードベースのトランザクション処理を置き換えるには (より頻繁に使用されます)
save* は、save で始まるメソッドを示し、PROPATATION_REQUIRED トランザクション伝播を使用し、REPEATABLE_READ トランザクション分離を使用します
基于注解
基于xml的事务和基于注解的事务对比
ホームページ Java &#&チュートリアル Spring トランザクション管理の関連概要 (コード付き)

Spring トランザクション管理の関連概要 (コード付き)

Oct 09, 2018 pm 02:34 PM
spring

この記事は Spring トランザクション管理の概要 (コード付き) です。必要な方は参考にしていただければ幸いです。

トランザクション

操作の論理的なグループ。操作の各部分は成功または失敗します。

トランザクションの特性

  • 一貫性: トランザクションの前後のデータ整合性は一貫性を保ちます

  • 原子性: トランザクションは分割できず、すべて成功するかすべて失敗します

  • 分離: トランザクションの実行は他のトランザクションの影響を受けず、相互に分離されます

  • 永続性: トランザクションは完了するとデータベースに保存され、影響を受けませんシステムによるクラッシュの影響

特性が満たされていない場合に発生する問題

分離によって発生する問題:

質問を読む

  • ダーティ リード: トランザクションは、他のトランザクションによってコミットされていないデータを読み取ります。

  • Non-repeatable read: トランザクションは、他のトランザクションによって送信されたデータを読み取りますUpdate データにより、複数回一貫性のないクエリ結果が発生します。

  • ファントム読み取り: 1 つのトランザクションが、別のトランザクション から挿入 データを読み取るため、一貫性のないクエリ結果が発生します。複数回

書き込み問題

  • 操作損失

読み取り問題の解決

トランザクション分離レベルの設定

Spring トランザクション管理の関連概要 (コード付き)

   int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
ログイン後にコピー
  • ISOLATION_DEFAULT: 春のデフォルト値を表し、基礎となるデータベースのデフォルト分離レベルが使用されることを示します。たとえば、mysql は ISOLATION_REPEATABLE_READ を使用し、ISOLATION_READ_COMMITTEDを使用します

  • ISOLATION_READ_UNCOMMITTED: コミットされていない読み取り、読み取りの問題を解決できません

  • ISOLATION_READ_COMMITTED: コミットされた読み取り、解決できますダーティな問題読み取り、ファントム リードと非反復読み取りは解決できません

  • ISOLATION_REPEATABLE_READ: 反復読み取り、ダーティー リードと非反復読み取りは解決できます

  • # #ISOLATION_SERIALIZABLE: すべての読み取り問題を解決できますが、効率は高くありません

Spring のトランザクション管理 API

PlatformTransactionManager: プラットフォーム トランザクション マネージャー

PlatformTransactionManager はインターフェイスです。 Spring オブジェクトの最下層でトランザクションを管理するために使用されます。

Spring トランザクション管理の関連概要 (コード付き)

public interface PlatformTransactionManager {
    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
    void commit(TransactionStatus status) throws TransactionException;
    void rollback(TransactionStatus status) throws TransactionException;
}
ログイン後にコピー

spring things 公式 Web サイトのアドレスより一般的な実装クラスは次のとおりです:

  1. DataSourceTransactionManager: 一番下層は JDBC トランザクション管理を使用します

  2. HibernateTransactionManager: 最下層は Hibernate トランザクション管理を使用します

  • TransactionDefinition:

    Transaction定義: トランザクションを定義できます。 関連情報、トランザクションの伝播動作、分離レベル、タイムアウト情報、読み取り専用かどうか

  • package org.springframework.transaction;
    
    //可以看到事物的定义也是一个接口
    public interface TransactionDefinition {
        //事物的传播行为,7种
        int PROPAGATION_REQUIRED = 0;
        int PROPAGATION_SUPPORTS = 1;
        int PROPAGATION_MANDATORY = 2;
        int PROPAGATION_REQUIRES_NEW = 3;
        int PROPAGATION_NOT_SUPPORTED = 4;
        int PROPAGATION_NEVER = 5;
        int PROPAGATION_NESTED = 6;
        
        //事物的隔离级别五种
        int ISOLATION_DEFAULT = -1;
        int ISOLATION_READ_UNCOMMITTED = 1;
        int ISOLATION_READ_COMMITTED = 2;
        int ISOLATION_REPEATABLE_READ = 4;
        int ISOLATION_SERIALIZABLE = 8;
    
        //事物的超时时间,-1代表没有超时时间
        int TIMEOUT_DEFAULT = -1;
    
        int getPropagationBehavior();
    
        int getIsolationLevel();
    
        int getTimeout();
    
        boolean isReadOnly();
    
        String getName();
    }
    ログイン後にコピー
  • TransactionStatus: トランザクションのステータス

    トランザクションステータス: レコード管理トランザクションプロセス トランザクションステータスのオブジェクト

Spring の 7 種類のトランザクション伝播動作

トランザクション伝播動作は、次の問題を解決するために使用されます。ビジネスメソッド間の相互呼び出し

公式サイトポータル

前提条件:

メソッドB()内でメソッドA()を呼び出す

ネストしたトランザクション

  • PROPAGATION_NESTED: A にトランザクションがあり、トランザクション A は正常に実行されます。トランザクション A の実行が完了したら、セーブ ポイントを設定し、操作 B を実行します。 B が例外をスローした場合は、初期位置にロールバックするか、またはセーブ ポイントにロールバックできます。

    操作がトランザクション内の同じ

PROPAGATION_REQUIRED 内にあることを確認します。メソッド B がメソッド A を呼び出し、メソッド A にトランザクションがある場合、メソッド B は A のトランザクションを使用します。 A にトランザクションがない場合、B はトランザクションを作成します

  • PROPAGATION_SUPPORTS: B が A を呼び出します。A にトランザクションがある場合は、A のトランザクションが使用されます。 A にトランザクションがない場合、B はそのトランザクションを使用しません

  • PROPAGATION_MANDATORY: A にトランザクションがある場合は、A のトランザクションを使用します。A にトランザクションがない場合は、例外がスローされます

  • トランザクション内の操作が同じ

PROPAGATION_REQUIRES_NEW 内にないことを確認します。A にトランザクションが存在します。A トランザクションを一時停止します。 、B の開かれたトランザクションには独自の操作のみが含まれます。 A にはトランザクションが存在せず、B によって作成されたトランザクションには独自の操作のみが含まれています

  • PROPAGATION_NOT_SUPPORTED: A にトランザクションがあり、A は一時停止されており、B はそのトランザクションを使用していません

    *PROPAGATION_NEVER: A にトランザクションがあり、B がスローされる例外

  • Spring は 2 つのトランザクション管理メソッドを提供します

宣言型トランザクション管理: Spring 構成ファイルで宣言的にトランザクションを処理する コードベースのトランザクション処理を置き換えるには (より頻繁に使用されます)

  • トランザクション管理のプログラミング: コードベースのトランザクション処理では、プログラムにコードを記述する必要があります

  • 宣言型トランザクション管理
  • xml に基づく

    <!--配置事务管理器-->
        <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
            <property name="dataSource" ref="dataSource" ></property>
        </bean>
    <!--配置事务-->
        <tx:advice id="myAdvice" transaction-manager="trancationManager">
            <tx:attributes>
                <!--配置事务传播和事务隔离-->
                <tx:method name="save*" propagation="REQUIRED" isolation="REPEATABLE_READ"/>
                <tx:method name="update*" propagation="REQUIRED"/>
                <tx:method name="delete*" propagation="REQUIRED"/>
                <tx:method name="find*" read-only="true"/>
                <tx:method name="*" propagation="REQUIRED" />
            </tx:attributes>
        </tx:advice>
        <!--事务是利用aop实现的-->
        <aop:config>
            <aop:pointcut id="ponitcut" expression="execution(* com.amber.xml.service.AccountServiceImpl.transferMoney(..))"></aop:pointcut>
            <aop:advisor advice-ref="myAdvice" pointcut-ref="ponitcut" />
        </aop:config>
    ログイン後にコピー

    save* は、save で始まるメソッドを示し、PROPATATION_REQUIRED トランザクション伝播を使用し、REPEATABLE_READ トランザクション分離を使用します

    基于注解

    <!--配置事务管理器-->
        <bean id="trancationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
            <property name="dataSource" ref="dataSource" ></property>
        </bean>
        <!--开启注解事务-->
        <tx:annotation-driven transaction-manager="trancationManager" />
    ログイン後にコピー

    使用tx:annotation-driven 开启事务的注解后,在使用的时候只需要在类或者方法上加入@Transactional就可以开启注解

    基于xml的事务和基于注解的事务对比

    • 文件配置对比
      事务基于注解简化了xml中的

    • 使用比较
      使用注解必须在类或者方法上添加@Trasactional,如果有多个业务类,则需要在每个业务类上添加
      使用xml只需要在配置文件中配置包名即可

    事务github代码

    以上がSpring トランザクション管理の関連概要 (コード付き)の詳細内容です。詳細については、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