問題タブ [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.

0 投票する
1 に答える
1195 参照

spring-boot - Spring Boot と長時間実行されるタスク

私の Spring Boot アプリケーションでは、インポート サービスを実装する必要があります。ユーザーは一連の JSON ファイルを送信でき、アプリケーションはこれらのファイルからデータをインポートしようとします。JSON ファイルのデータ量によっては、1 回のインポート プロセスに 1 ~ 2 時間かかる場合があります。

インポート プロセス中にユーザーをブロックしたくないので、インポートのタスクを受け入れ、このデータの処理がスケジュールされていることをユーザーに通知する予定です。データをキューに入れると、反対側の空いているキュー コンシューマーがインポート プロセスを開始します。また、キュー内のジョブを監視し、必要に応じて終了できるようにする必要があります。

現在、メッセージのプロデューサとコンシューマのロジックを導入するために Embedded を使用することを考えていますApache ActiveMQが、その前に、アーキテクチャの観点から、説明されているタスクに適しているのか、それとも実装できるのかを尋ねたいと思います。より適切なツール..たとえば、単純なSpring@Asyncなどですか?

0 投票する
0 に答える
1098 参照

java - @Retryable が @EventListener Spring で機能しない

コンポーネントでもあるクラスにメソッドがあります。メソッドには次の注釈があります。

なんらかの理由で、retay がトリガーされていません。

0 投票する
1 に答える
3210 参照

java - Spring の @Async void を返すメソッドのテスト

@AsyncSpring アプリで返す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 を使用しています。