私は、Crystalレポートを使ってレポートを生成できるWebアプリケーション(java、tomcat)を持っています。問題は、ユーザーが完了するのに時間がかかる巨大なレポートをリクエストした場合、私のアプリケーション全体が停止することです。このようなリクエストを停止する方法はありますか?5分後に完了していないとしたらどうですか?速度を最適化し、レポートのサイズを制限する以外に、他の回避策はありますか?サーバリクエストの停止
1
A
答えて
2
あなたは別のスレッドでレポート生成を実行していないと思います。別のスレッドでレポート生成を実行し、準備ができたらリンクをユーザーに送り返す方がよいでしょう。
javaのExecutorServiceを使用して、スレッドにタイムアウトを設定することができます。また、割り当てられた時間を超えると期限切れになります。 JavaのExecutorServiceの、未来のための
検索、呼び出し可能なチュートリアル
サンプルコード:
Callable<Integer> callable = new CallableImpl(2);
ExecutorService executor = new ScheduledThreadPoolExecutor(5);
Future<Integer> future = executor.submit(callable);
Integer result = future.get(600,TimeUnit.seconds));
+0
ありがとう私はこれを見ていきます – ha1ogen
1
もう1つの方法は、別のスレッドでレポート生成を実行するか(またはExecutorService
を使用して)、生成時間があるしきい値を超えるとThread.interrupt()
を呼び出します。 I/O(ネットワーク、データベース)上で現在ブロックされている場合、スレッドは中断される可能性があります。
関連する問題
- 1. C#タイマー停止後のイベントハンドラーの停止
- 2. サーバリクエストとデバイスローテーションの処理
- 3. 停止NSDictionaryの
- 4. スレッドの停止
- 5. JBossサーバーの停止
- 6. jQueryコーダスライダエフェクトナビゲーションの停止
- 7. jQueryの停止は
- 8. 停止jQueryのアニメーションループ
- 9. jqueryサイクルプラグインの停止
- 10. 停止(クリーンアップ)
- 11. 停止SQLインジェクション
- 12. ホストサービス停止
- 13. Eclipse:NotANumberで停止
- 14. 停止MAMP MySQL
- 15. 停止javascript_include_tag
- 16. 停止伝播
- 17. 停止NSFileManagerプロセス
- 18. ColdFusionを停止
- 19. 停止サファリ(favelet)
- 20. jQuery停止ボタンポストバック
- 21. 停止ベル音
- 22. 停止ループ
- 23. 停止イベント
- 24. WaveAudioStreamの一時停止/停止時の待ち時間
- 25. Eclipseでのデバッグの停止を停止します
- 26. コーダスライダの停止/一時停止/再生ボタンの実装
- 27. WCF、ビルド時に停止するlog4netファイルの停止方法
- 28. サーバリクエストのないポップアップを開きます
- 29. 一時停止ボタンはAVAudioPlayerを一時停止するのではなく停止しています。
- 30. AVAudioPlayer停止問題
_Why_が停止するアプリケーショングラインドていますか? –
レポートの生成がtomcatのCPUとmemomeyリソースを突っ込んでいると思うので – ha1ogen
トランザクションシステムでこのようなレポートを実行するのは良い考えではありません - 再設計について考えるべきです... – home