2

Spring MVC を使用して開発された webapp があります。jasperReports を使用して、ユーザーがダウンロードする一連のレポートを生成しています。これらのレポートのいくつかでは、jasper による入力に時間がかかりすぎて、クライアント側でトランザクション タイムアウト、Tomcat タイムアウト、またはゲートウェイ タイムアウトが発生します。

このような長時間実行されるプロセスに適したソリューションは何ですか? ユーザーがファイルをダウンロードできるように、プロセスが終了するたびに何らかの方法でユーザーに通知する必要があることに注意してください。

4

1 に答える 1

4

このような問題を処理する最もクリーンな方法は、クライアントと非同期通信を行うことです。

最初のリクエスト/myApp/report?name=...&paramters...はジャスパー レポートをトリガーしてレポートを更新し、チケット ID を返します。

次に、クライアントは別の URL を呼び出してレポートを取得する必要があります (たとえば、5 秒ごと)。/myApp/reportDownload?ticketId=xxxxx

jasper スレッドが終了し、レポートの準備ができたら、レポートを送り返します。それ以外の場合は、クライアントがレポートを取得するまで 5 秒後に再試行するように指示します。

これを実装する方法は、フロントエンドとバックエンドで使用しているテクノロジによって異なりますが、インターネット上で多数のチュートリアルを見つけることができます。

これを修正する最悪の方法は、コネクタ構成でタイムアウトを増やすことです ( http://tomcat.apache.org/tomcat-7.0-doc/config/http.html )

ハイ

于 2013-09-04T08:26:00.503 に答える