問題タブ [spring-async]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring-boot - Spring Boot と長時間実行されるタスク
私の Spring Boot アプリケーションでは、インポート サービスを実装する必要があります。ユーザーは一連の JSON ファイルを送信でき、アプリケーションはこれらのファイルからデータをインポートしようとします。JSON ファイルのデータ量によっては、1 回のインポート プロセスに 1 ~ 2 時間かかる場合があります。
インポート プロセス中にユーザーをブロックしたくないので、インポートのタスクを受け入れ、このデータの処理がスケジュールされていることをユーザーに通知する予定です。データをキューに入れると、反対側の空いているキュー コンシューマーがインポート プロセスを開始します。また、キュー内のジョブを監視し、必要に応じて終了できるようにする必要があります。
現在、メッセージのプロデューサとコンシューマのロジックを導入するために Embedded を使用することを考えていますApache ActiveMQ
が、その前に、アーキテクチャの観点から、説明されているタスクに適しているのか、それとも実装できるのかを尋ねたいと思います。より適切なツール..たとえば、単純なSpring@Async
などですか?
java - @Retryable が @EventListener Spring で機能しない
コンポーネントでもあるクラスにメソッドがあります。メソッドには次の注釈があります。
なんらかの理由で、retay がトリガーされていません。
java - Spring の @Async void を返すメソッドのテスト
@Async
Spring アプリで返すvoid
(またはUnit
、Kotlin で書いている)メソッドに少し問題があります。
理由はわかりませんが、@Async
メソッドが返さvoid
れたときに実行されないか、少なくとも本来の動作が行われません。私の非同期メソッドでは、 を使用してメールを送信したいJavaMailSender
ので、大したことはありません。メソッドは次のとおりです。
しかし、電子メールは決して来ません。例外はログに記録されません (私は testNG テストを実行しています)。
関数のシグネチャを変更して関数を返すようにしFuture<String>
、ダミーの return 行を関数の最後に追加してから を呼び出すservice.sendEmail(...).get()
と、メソッドの本体が魔法のように実行され、電子メールが届きます。
私の@Configuration
クラスには、 があり@EnableAsync
ます。また、独自のエグゼキューターと例外ハンドラーを実装AsyncConfigurer
して提供しました。これは、エグゼキューター Bean の定義に問題がある可能性があると考えたからですが、何も役に立ちませんでした。
バックグラウンドで何かを静かに実行したいだけで、うまくいかないので、これは私を夢中にさせています。静かにということは、内部でスローされる例外に悩まされたくないということです。
あなたはなにか考えはありますか?
更新:
@pleftがアドバイスしたように、メソッド内にいくつかのプリントを入れました。を実行すると、毎回ではなくmvn clean test
、1,2,3 が出力されていることがわかります。1 と 2 だけが印刷されることもありました。print も入れましたAsyncUncaughtExceptionHandler
が、それは呼び出されません。バックグラウンド スレッドが殺されるのが早すぎるか何かのようです。
更新 2:
私のサービス構成:
重要かもしれませんが、重要ではないかもしれませんが、私はそのprocessTemplate
方法で Thymeleaf を使用しています。