非同期タスクでのリクエスト スコープの維持
Web アプリケーションでは、リクエストを受信した後に非同期タスクを実行するのが一般的です。ただし、これらのタスクが @Scope(value = WebApplicationContext.SCOPE_REQUEST) アノテーションが付けられたオブジェクトなど、リクエスト固有のオブジェクトに確実にアクセスできるようにするのは困難な場合があります。
非ブロック的な方法でリクエストを処理する場合、デフォルトの SimpleAsyncTaskExecutor はリクエスト スレッドのスコープにアクセスできないため、「現在のスレッドではスコープ 'request' がアクティブではありません。」のような例外が発生します。
この問題に対処するために、カスタム ContextAwarePoolExecutor を作成できます。このエグゼキュータはタスクのリクエスト コンテキスト情報を保存し、ContextAwareCallable を利用してバックグラウンド スレッドに必要なコンテキストを設定およびクリアします。
カスタム エグゼキュータの実装:
<code class="java">public class ContextAwarePoolExecutor extends ThreadPoolTaskExecutor { @Override public <t> Future<t> submit(Callable<t> task) { return super.submit(new ContextAwareCallable(task, RequestContextHolder.currentRequestAttributes())); } }</t></t></t></code>
コンテキスト認識呼び出し可能:
<code class="java">public class ContextAwareCallable<t> implements Callable<t> { private Callable<t> task; private RequestAttributes context; public ContextAwareCallable(Callable<t> task, RequestAttributes context) { this.task = task; this.context = context; } @Override public T call() throws Exception { if (context != null) { RequestContextHolder.setRequestAttributes(context); } try { return task.call(); } finally { RequestContextHolder.resetRequestAttributes(); } } }</t></t></t></t></code>
構成オーバーライド:
<code class="java">@Configuration public class ExecutorConfig extends AsyncConfigurerSupport { @Override @Bean public Executor getAsyncExecutor() { return new ContextAwarePoolExecutor(); } }</code>
このカスタム エグゼキュータを利用することで、非同期タスクはリクエストにシームレスにアクセスできます。スコープ付きオブジェクト。デフォルトの SimpleAsyncTaskExecutor.
の制限を克服します。以上が非同期タスクでリクエストのスコープを維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

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

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

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

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