検索
ホームページJava&#&チュートリアルSpring で同じクラス内で @Transactional メソッドを自己呼び出しすると失敗するのはなぜですか?

Why Do @Transactional Methods Fail When Self-Invoked Within the Same Class in Spring?

同じクラス内のトランザクション メソッド呼び出しの問題

問題:

Spring で、次の注釈が付けられたメソッドを呼び出そうとしている同じクラス内からの @Transaction は非効率的な結果となる可能性があります。 transaction.

コード例:

public class UserService {

    @Transactional
    public boolean addUser(String userName, String password) {
        // ...
    }

    public boolean addUsers(List<user> users) {
        for (User user : users) {
            addUser(user.getUserName, user.getPassword);
        }
    }
}</user>

問題の理解:

この問題は Spring の制限により発生しますAOP の動的オブジェクト処理と cglib の使用。 Spring のデフォルトのトランザクション処理メカニズムは、cglib で作成された動的プロキシを使用するため、同じクラス内からトランザクション メソッドを呼び出すときに不一致が発生する可能性があります。

解決策:

トランザクション処理に AspectJ を使用する:

解決するにはこれにより、トランザクションの処理に AspectJ を使用するように Spring を設定できます。これには以下が含まれます:

  • tx:annotation-driven でモードを aspectj に設定:

    <annotation-driven mode="aspectj"></annotation-driven>
  • 次の Bean 構成を追加します (春バージョンは以下3.0):

    <bean class="org.springframework.transaction.aspectj.AnnotationTransactionAspect" factory-method="aspectOf">
      <property name="transactionManager" ref="transactionManager"></property>
    </bean>

リファクタリング:

別の解決策は、コードをリファクタリングすることです。同じクラス内からトランザクション メソッドを呼び出す代わりに、ユーザー処理と処理用に別のクラスを作成して、Spring AOP を使用したデフォルトのトランザクション処理を有効にすることを検討してください。

以上がSpring で同じクラス内で @Transactional メソッドを自己呼び出しすると失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は?会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は?Apr 19, 2025 pm 04:51 PM

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

JavaのパラメーターQRコードを使用してWeChatアプレットを正しく生成して表示する方法は?JavaのパラメーターQRコードを使用してWeChatアプレットを正しく生成して表示する方法は?Apr 19, 2025 pm 04:48 PM

Javaにパラメーターを使用してWeChatアプレットQRコードを生成し、HTMLページに表示することは一般的な要件です。この記事では、Jの使用方法について詳しく説明します。

Javaマルチインターフェイスコールで状態同期を実現する方法:インターフェイスBでインターフェイスAを聴くことの影響?Javaマルチインターフェイスコールで状態同期を実現する方法:インターフェイスBでインターフェイスAを聴くことの影響?Apr 19, 2025 pm 04:45 PM

Java Multi-interfaceコール間の状態同期呼び出し:Java開発でインターフェイスBに対するインターフェイスAの影響を聞くと、複数のインターフェイスを同時に呼び出す必要がある状況に遭遇することがよくあります...

Javaの単一のスレッドの下で命令を並べ替えると、出力結果が変化しますか?Javaの単一のスレッドの下で命令を並べ替えると、出力結果が変化しますか?Apr 19, 2025 pm 04:42 PM

JavaプログラミングのJavaの単一スレッドの下での単一スレッドの下での指導の並べ替えに関する議論、指導の並べ替えは一般的なトピックです。命令の並べ替えとは、コンパイラとプロセッサを指します...

Javaコードを使用してOutlookで毎日または毎週のカレンダーイベントを繰り返す方法を作成する方法は?Javaコードを使用してOutlookで毎日または毎週のカレンダーイベントを繰り返す方法を作成する方法は?Apr 19, 2025 pm 04:39 PM

Outlookで定期的な繰り返しカレンダーイベントを作成するこの記事では、Javaコードを使用してOutlookで毎日または毎週の繰り返しカレンダーイベントを作成する方法について説明します。運ぶ...

TomcatはサーブレットエラーJava.lang.IllegalStateExceptionを開始します:サーブレットAPI.jarのロードの問題をトラブルシューティングする方法は?TomcatはサーブレットエラーJava.lang.IllegalStateExceptionを開始します:サーブレットAPI.jarのロードの問題をトラブルシューティングする方法は?Apr 19, 2025 pm 04:36 PM

Tomcatは、トラブルシューティング時にサーブレットエラーチェックを開始します。サーブレットアプリケーションを展開するとき、Tomcatは起動に失敗し、Java.lang.IllegalStateExceptionを報告しました:...

ZipinputStreamは、中国のファイル名を減圧できませんでしたか?キャラクターを正しく設定する方法は?ZipinputStreamは、中国のファイル名を減圧できませんでしたか?キャラクターを正しく設定する方法は?Apr 19, 2025 pm 04:33 PM

ZIPINPUTSTREAMの文字セット設定に関する議論多くの開発者は、ZIPINPUTSTREAMを使用して、中国のファイル名またはフォルダー名を含むZIPパッケージを減圧します...

LLMゲートウェイを構築するときにSpring WebFluxを使用してServerBからServerCへの再試行戦略を実装する方法は?LLMゲートウェイを構築するときにSpring WebFluxを使用してServerBからServerCへの再試行戦略を実装する方法は?Apr 19, 2025 pm 04:30 PM

LLMを構築する際にSpringWebFluxを使用してRETRY戦略を実装しています...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール