Spring Boot Childスレッドアクセスメインスレッドのリクエスト情報はどのようにしていますか?
Spring Boot Childスレッドはメインスレッドリクエスト情報に安全にアクセスするにはどうすればよいですか
Spring Bootアプリケーションでは、コントローラーレイヤーが非同期タスクを開始し、サービスレイヤーが新しいスレッドを使用して処理すると、子スレッドがメインスレッドHttpServletRequest
オブジェクトにアクセスできないという問題に直面することがよくあります。これは、 HttpServletRequest
メインスレッドライフサイクルにバインドされており、チャイルドスレッドに直接アクセスできないためです。この記事では、この問題を分析し、信頼できるソリューションを提供します。
質問の説明:
InheritableThreadLocal<httpservletrequest></httpservletrequest>
を直接使用しますInheritableThreadLocal<httpservletrequest></httpservletrequest>
HttpServletRequest
オブジェクトがメインスレッドがリクエストを処理した後に破壊された可能性があるため、 HttpServletRequest
子スレッドに渡すことは信頼できません。配信が成功したとしても、メモリリークやその他の問題を引き起こす可能性があります。
エラーデモンストレーション(コードスニペット):
次のコードは、 InheritableThreadLocal
を使用してHttpServletRequest
渡そうとしますが、子スレッドは正しいユーザー情報を取得できません。
コントローラ:
@RestController @RequestMapping( "/test") Public Class TestController { プライベートStatic EntertableThreadLocal<httpservletrequest> requestholder = new EnersitableThreadLocal (); @Autowired プライベートテストサービステストサービス。 @getMapping( "/check") public void check(httpservletrequestリクエスト){ string userid = request.getheader( "userid"); System.out.println( "メインスレッドユーザーID:" userId); requestholder.set(request); new shood(() - > testservice.dosomething())。start(); System.out.println( "メインスレッドエンド"); } }</httpservletrequest>
サービスレイヤー:
@サービス パブリッククラスのtestservice { public void dosomething(){ httpservletrequest request = requestholder.get(); string userid = request!= null? request.getheader( "userid"): "null"; system.out.println( "Child Thread userid:" userid); } }
解決:
HttpServletRequest
オブジェクトを直接渡すことは避けてください。ベストプラクティスは、 HttpServletRequest
から必要な情報( userId
など)を抽出し、この情報をInheritableThreadLocal
に保存することです。
改善されたコードの例:
コントローラ:
@RestController @RequestMapping( "/test") Public Class TestController { プライベートStatic EntertableThreadLocal<string> useridholder = new EnersitableThreadLocal (); @Autowired プライベートテストサービステストサービス。 @getMapping( "/check") public void check(httpservletrequestリクエスト){ string userid = request.getheader( "userid"); System.out.println( "メインスレッドユーザーID:" userId); useridholder.set(userid); new shood(() - > testservice.dosomething())。start(); System.out.println( "メインスレッドエンド"); } }</string>
サービスレイヤー:
@サービス パブリッククラスのtestservice { public void dosomething(){ string userid = useridholder.get(); system.out.println( "Child Thread userid:" userid); } }
この改良されたバージョンは、 userId
のみに合格し、 HttpServletRequest
オブジェクトのライフサイクルを回避し、子スレッドが必要なデータに確実にアクセスできるようにします。実際のニーズに応じて、他の必要な情報は、 InheritableThreadLocal
に保存することもできます。メモリの漏れを避けるために、使用後にInheritableThreadLocal
てからのデータを忘れずにクリアすることを忘れないでください。
以上がSpring Boot Childスレッドアクセスメインスレッドのリクエスト情報はどのようにしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホット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)

ホットトピック











Centosシステムでは、Redis構成ファイルを変更するか、Redisコマンドを使用して悪意のあるスクリプトがあまりにも多くのリソースを消費しないようにすることにより、LUAスクリプトの実行時間を制限できます。方法1:Redis構成ファイルを変更し、Redis構成ファイルを見つけます:Redis構成ファイルは通常/etc/redis/redis.confにあります。構成ファイルの編集:テキストエディター(VIやNANOなど)を使用して構成ファイルを開きます:sudovi/etc/redis/redis.conf luaスクリプト実行時間制限を設定します。

この記事では、DebianシステムのHadoopデータ処理効率を改善する方法について説明します。最適化戦略では、ハードウェアのアップグレード、オペレーティングシステムパラメーターの調整、Hadoop構成の変更、および効率的なアルゴリズムとツールの使用をカバーしています。 1.ハードウェアリソースの強化により、すべてのノードが一貫したハードウェア構成、特にCPU、メモリ、ネットワーク機器のパフォーマンスに注意を払うことが保証されます。高性能ハードウェアコンポーネントを選択することは、全体的な処理速度を改善するために不可欠です。 2。オペレーティングシステムチューニングファイル記述子とネットワーク接続:/etc/security/limits.confファイルを変更して、システムによって同時に開くことができるファイル記述子とネットワーク接続の上限を増やします。 JVMパラメーター調整:Hadoop-env.shファイルで調整します

mysqlダウンロードファイルは破損していますが、どうすればよいですか?残念ながら、MySQLをダウンロードすると、ファイルの破損に遭遇できます。最近は本当に簡単ではありません!この記事では、誰もが迂回を避けることができるように、この問題を解決する方法について説明します。それを読んだ後、損傷したMySQLインストールパッケージを修復するだけでなく、将来の行き詰まりを避けるために、ダウンロードとインストールプロセスをより深く理解することもできます。最初に、ファイルのダウンロードが破損した理由について話しましょう。これには多くの理由があります。ネットワークの問題は犯人です。ダウンロードプロセスの中断とネットワーク内の不安定性は、ファイル腐敗につながる可能性があります。ダウンロードソース自体にも問題があります。サーバーファイル自体が壊れており、もちろんダウンロードすると壊れています。さらに、いくつかのウイルス対策ソフトウェアの過度の「情熱的な」スキャンもファイルの破損を引き起こす可能性があります。診断問題:ファイルが本当に破損しているかどうかを判断します

PHPMyAdminセキュリティ防衛戦略の鍵は次のとおりです。1。PHPMyAdminの最新バージョンを使用し、PHPとMySQLを定期的に更新します。 2.アクセス権を厳密に制御し、.htaccessまたはWebサーバーアクセス制御を使用します。 3.強力なパスワードと2要素認証を有効にします。 4.データベースを定期的にバックアップします。 5.機密情報が公開されないように、構成ファイルを慎重に確認します。 6。Webアプリケーションファイアウォール(WAF)を使用します。 7.セキュリティ監査を実行します。 これらの測定は、不適切な構成、古いバージョン、または環境セキュリティのリスクにより、PHPMyAdminによって引き起こされるセキュリティリスクを効果的に削減し、データベースのセキュリティを確保することができます。

CENTOSシステムにHadoop分散ファイルシステム(HDFS)を構築するには、複数のステップが必要です。この記事では、簡単な構成ガイドを提供します。 1.初期段階でJDKをインストールする準備:すべてのノードにJavadevelopmentKit(JDK)をインストールすると、バージョンはHadoopと互換性がある必要があります。インストールパッケージは、Oracleの公式Webサイトからダウンロードできます。環境変数構成: /etc /プロファイルファイルを編集し、JavaおよびHadoop環境変数を設定して、システムがJDKとHadoopのインストールパスを見つけることができるようにします。 2。セキュリティ構成:SSHパスワードなしログインSSHキーを生成する:各ノードでSSH-KeyGenコマンドを使用する

Debian Systemsでは、Directoryコンテンツを読み取るためにReadDirシステム呼び出しが使用されます。パフォーマンスが良くない場合は、次の最適化戦略を試してください。ディレクトリファイルの数を簡素化します。大きなディレクトリをできる限り複数の小さなディレクトリに分割し、Readdirコールごとに処理されたアイテムの数を減らします。ディレクトリコンテンツのキャッシュを有効にする:キャッシュメカニズムを構築し、定期的にキャッシュを更新するか、ディレクトリコンテンツが変更されたときに、頻繁な呼び出しをreaddirに削減します。メモリキャッシュ(memcachedやredisなど)またはローカルキャッシュ(ファイルやデータベースなど)を考慮することができます。効率的なデータ構造を採用する:ディレクトリトラバーサルを自分で実装する場合、より効率的なデータ構造(線形検索の代わりにハッシュテーブルなど)を選択してディレクトリ情報を保存およびアクセスする

Debian SystemsのPostgreSQLデータベースのパフォーマンスを改善するには、ハードウェア、構成、インデックス、クエリ、その他の側面を包括的に検討する必要があります。次の戦略は、データベースのパフォーマンスを効果的に最適化できます。1。ハードウェアリソース最適化メモリ拡張:適切なメモリは、データとインデックスをキャッシュするために重要です。高速ストレージ:SSD SSDドライブを使用すると、I/Oパフォーマンスが大幅に向上する可能性があります。マルチコアプロセッサ:マルチコアプロセッサを最大限に活用して、並列クエリ処理を実装します。 2。データベースパラメーターチューニングShared_Buffers:システムメモリサイズの設定によると、システムメモリの25%〜40%に設定することをお勧めします。 work_mem:ソートとハッシュ操作のメモリを制御します。通常は64MBから256mに設定されています

リモートシニアバックエンジニアの求人事業者:サークル場所:リモートオフィスジョブタイプ:フルタイム給与:$ 130,000- $ 140,000職務記述書サークルモバイルアプリケーションとパブリックAPI関連機能の研究開発に参加します。ソフトウェア開発ライフサイクル全体をカバーします。主な責任は、RubyonRailsに基づいて独立して開発作業を完了し、React/Redux/Relay Front-Endチームと協力しています。 Webアプリケーションのコア機能と改善を構築し、機能設計プロセス全体でデザイナーとリーダーシップと緊密に連携します。肯定的な開発プロセスを促進し、反復速度を優先します。 6年以上の複雑なWebアプリケーションバックエンドが必要です
