0

私はSpring @Controllerを持っています。コントローラ内には、特定のリクエストが while ループに入った後に新しいデータをチェックし、データが見つかった場合にのみ中断するメソッドがあります。

while(System.currentTimeMillis() < end && controllersDataStore.getAutoupdate() == eventAutoUpdate ) {

        gridData = (GenericGrid) dsEventLogService.retrieveNewEventGridRows(gridHelper);
        if(gridData.getAaData().size()==0){
            try {
                Thread.sleep(POLLING_INTERVAL);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        else{
            break;
        }
    }

特定のユーザー アクションの後、データが見つからなくても、特定のケースではループから抜け出す必要があります。したがって、前の while ループから抜け出すには、新しい HttpRequest が必要です。

また、これはユーザーごとにする必要があるため、あるユーザーは別のユーザーのアクションと対話できません。

コントローラーはシングルトンであるため、すべてのセッションで共通のプロパティを持ちます。これは、状態をグローバル プロパティに保存してから、ループ内で変更をチェックして中断できるようにすることはできないことを意味します。これは、セッションごとのプロパティではないためです。

コントローラーにセッションスコープを持たせる以外にそれを行う方法はありますか? (それが機能するかどうかさえわかりません)。

事前に感謝します。ヒントをいただければ幸いです。

4

1 に答える 1

1

keepRunning 値を db config テーブルに保存し、n 秒後にこれもチェックします。

別のコントローラーの別の要求は、このコントローラーとは独立して状態変数を更新できます。

于 2011-11-07T08:07:35.167 に答える