問題タブ [scheduledexecutorservice]
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.
java - 参照を保持せずに、ScheduledExecutorService で実行されているタスクを取得できますか?
私は現在ScheduledExecutorService
、 の代わりにを使用するようにアプリケーションを変更しています。以前は、保持Timer
した を使用してスケジュールされたタスクにアクセスしていましたが、タスクにアクセスするだけでなく、タスクにアクセスすることもできました。Map
cancel()
この API ではMap
、2 つの を維持する必要があるようです。1 つはタスクにアクセスするため、もう 1 つSheduledFuture<?>
は によって返されschedule()
た をキャンセルできるようにするためです。
私はこの投稿を読みましたが、私がしたことと比較して実装するのは非常に重いようですTimer
(1 つだけMap
が必要でした)。
これは、アクセスしてキャンセルする必要がある 2 つのタスクを持つ単純なアプリケーションです。
私が取得できなかったものはありますか、それとも「Executor は、この単純なものに必要なものではありませんか?」
java - ScheduledExecutorService が shutdownNow のときにメッセージが失われるのはなぜですか
私の Web アプリでは、実行可能なインスタンスを ScheduledExecutorService に送信します。実行可能なインスタンスでは、receiveNoWaitメソッドを使用してIBM MQからメッセージを受信し、セッションはCLIENT_ACKNOWLEDGEモードになっています。ScheduledExecutorService の shutdownNow メソッドを呼び出すと、acknowledge メソッドを呼び出さずに receive メソッドがメッセージを失うことがあります。何か提案はありますか?
メッセージを受信するコードは次のとおりです。
{
ScheduledExecutorService shutdownNow の場合、例外なく最初のログ情報しか表示されません。logger.info("获取消息");
メッセージ msg = consumer.receiveNoWait();
logger.info("获取消息成功");
メッセージを返します。
キャッチ(スロー可能なe){
logger.error("处理数的時候出现异常", e);
null を返します。
}
mysql - Java のスケジュールされたスレッドがデータベースを強制終了します
ツール: Spring 3.0、Hibernate 2.0、Java 6
同様のスレッドのほとんどは、不足しているライブラリのインストール、構成ファイルの修正などを提案しましたが、私のプロジェクトは完全に正常に動作しています。1 つのモジュールが問題を引き起こしている
やりたいこと:アプリケーションの起動時にスレッドを作成します。ユーザー リクエストを Web アプリに記録し、キューに入れます。スレッドは 60 秒ごとにキューを読み取り、トランザクション メソッドを呼び出してキューを永続化します。
データ構造: ConcurrentLinkedQueue - Bean の作成時に一度だけ初期化される
の定義init()
The Thread:別のクラスでは、スレッドは 60 秒の固定時間間隔の後に実行されるようにスケジュールされています。
持続性:の定義save()
アプリケーション ログ:
アプリケーションは、ローカル マシンでは問題なく実行されますが、サーバー (Amazon AWS bitnami tomcatstack) では数時間後にアプリが実行されます。データベース(MySQL)にアクセスできません。どうやら、MySQL は死んでいます。孤立した接続が多すぎるか何かが原因である可能性がありますが、私はまだそれを理解していません.
mysql -u root -p
このエラーが発生しますERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2)
スタックトレース:
それが理にかなっていることを願っています。
java - アプリサーバーでさまざまな数の時間指定ジョブを処理する方法
私は、システムに入って顧客にデータを表示するために、hibernate、spring、および jpa で glassfish を使用しています。
ただし、受信データに基づいてデータを計算するために、毎分複数のジョブを実行する必要もあります。
しかし、ジョブの数はわかりません。また、ジョブはデータベースから取得されるため、いつでも変更される可能性があります。x 人の顧客がいて、各顧客は 1 つから複数の仕事を持つことができます。
だから私が本当にする必要があるのは:
- テーブルから読み取って、実行するジョブの数を取得します
- これらのジョブを毎分実行する
- ジョブがテーブルから削除された場合、そのジョブの処理を停止します
- ジョブがテーブルに追加された場合は、新しいジョブをリストに追加します。
- これらの各ジョブは、テーブルから読み取り、いくつかの計算を行い、結果をテーブルに書き込みます。
いくつかのツール (quartz、ScheduledExecutorService など) について調べましたが、実際にこの機能を提供するものはありますか? それとも自分で書く必要がありますか?
tomcat - tomcat に ScheduledExecutorService をデプロイする
私は、これを機能させるためにあらゆる場所にある Beeper Control の例を使用してきました。動作しますが、これを Tomcat サーバーに統合する必要があります。リスナーを使用して web.xml ファイルに追加する必要があることはわかっていますが、ステップバイステップのチュートリアルはありますか? または、誰かがそれを展開する手順を教えてもらえますか?
ありがとう
java - scheduleExecutorService.shutdown が呼び出されなかったために失敗するテストを作成する方法は?
をコラボレーターとしているユニットで TDD を行っていScheduledExecutorService
ます。このユニットには、start
基本的にタスクでエグゼキューターを開始するメソッドがあり、メソッドを駆動するテストを書きたいと思います。誰もスレッドstop
を呼び出さないScheduledExecutorService.shutdown
とハングすることがわかっているからです (デフォルトではデーモン スレッドではありません)。
実際のエグゼキューター サービス (決定論的なものではない) を使用してユニットを構築することでこれを実行したかった@Test(timeout = 5000L)
のですが、直面している問題は、何らかの理由でテストがハングしないことです。
確かではありませんが、これは Intellij/Junit mix 呼び出しsystem.exit
と「my」jvm の強制終了に関連していると思います。
メソッドを使用して書いた手動の「テスト」では、main
メソッドを呼び出さずshutdown
にシステムが実際にスタックしていることを確認できます。
これをテストする方法についてのアイデアはありますか?
ありがとう
更新
問題を説明する小さなコード サンプルをまとめました。