0

これを正しい方法で理解するのに少し問題があります。

スレッドを使用して継続的にログ ファイルを読み取る Java アプリケーションがあります。そのアプリケーションがまだログ ファイルを読み込んでいる間に、クライアントは Java サーブレットを介して現在のステータス (つまり、ログ ファイルで特定のキーが見つかった) を照会できる必要があります。

私の現在の問題は、サーブレットの doGet-Method を使用してそのステータスを取得する際に問題があることです。スレッドの実行中に、単一のブール変数を変更することになっています。

私の質問は:

Tomcat にサーブレットをデプロイするときに、ログ リーダー スレッドの実行を開始するにはどうすればよいですか。アイドル モードでは、ログ リーダーはフォルダー内の新しいファイルをリッスンしており、ファイルが表示されると読み取りを開始しますか?

4

2 に答える 2

1

SevletcontexListener を使用できる以下のリンクを確認してください。

SevletcontexListener では、ロガーを開始できます

リンク

public void contextInitialized(ServletContextEvent servletContextEvent) 
    {
          System.out.println("ServletContextListener started"); 
         //start thread here
    }
public void contextDestroyed(ServletContextEvent servletContextEvent) {
     //stop thread here
}
于 2012-11-08T07:23:50.330 に答える
1

私の現在の問題は、サーブレットの doGet-Method を使用してそのステータスを取得する際に問題があることです。スレッドの実行中に、単一のブール変数を変更することになっています。

これはおそらく、スレッドセーフでないブール値の同時更新が原因です。このトピックの詳細については、Java Concurrencyに関する次のチュートリアルを参照してください。

Tomcat にサーブレットをデプロイするときに、ログ リーダー スレッドの実行を開始するにはどうすればよいですか。アイドル モードでは、ログ リーダーはフォルダー内の新しいファイルをリッスンしており、ファイルが表示されると読み取りを開始しますか?

次の answerを参照してください。ここでは、スレッドの高レベルの抽象化である をServletContextListener使用してスレッドを開始する方法が説明されています。Executors

お役に立てれば...

于 2012-11-08T07:50:42.437 に答える