3

サーバーと一緒に開始し、サーバーが強制終了されるまで終了しないサービスを開始したい。そのため、最初にServletContextListnerクラスを使用して、論理部分を実装し、を使用してメソッドを実行しました。

while(true){ 
    try{ // do the jobs } 
    catch(Exception e){} 
}

しかし、リスナークラスでこのジョブを実装するのは良くないと感じました。次に、1つのServiceManagerクラスに移動して同じジョブを実行しましたが、リスナークラスでは不可能なSpringを使用したプロパティの注入で優位に立つことができます。

しかし、このクラスをどこからどのように呼び出して、無限に実行されるstartServiceメソッドを呼び出すことができるかについての基本的な質問です。

public void contextInitialized(ServletContextEvent event) {
        logger.info(" *** START MyListener ****");
        context = event.getServletContext();
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
        MyServiceManager serviceManager = (MyServiceManager) ctx.getBean("myServiceManager");
        serviceManager.startService();
        logger.info(" *** END MyListener ****");
    }

または、そのようなサービスを呼び出して実装し、抽象化せずにサーバーで永久に実行する方法[どのような場合でも、サーバーが停止しない限り、これを強制終了しないでください]

4

2 に答える 2

1

これは重複した質問です。参照: サーブレットのバックグラウンドプロセス

したがって、その回答で説明されていることを実行できます。次に、Springで構成されたBeanをロードする必要がある場合は、applicationContext.getBean("yourBean");

于 2012-12-13T08:56:01.967 に答える
0

代替テクノロジー、つまり Node.js にオープンですか?

あなたのサーバーが何をしているのかはわかりませんが、iOS 用の「常時オン」のプッシュ通知サーバーを構築する必要があり、Node.js を使用してそれを行いました。

はいの場合、次のようにシステムを構築できます。

システムの構築

1) Java サーバーが HTTP Web 要求 (POST 要求) を受信したときに JSON データを Node.js サーバーに返すように、Java を使用して Web サービスをセットアップします。

2) Node.js が Java サーバーに POST リクエストを送信し、結果を取得して解析し、他のシステムに送信します。

耐障害性を備えた常時稼働サーバー

Node.js をインストールすると、Node.js の NPM (Node.js Package Manager) を使用して Forever ツールをインストールできます。

Forever ツールを使用すると、次のように移動できます。

forever start server.js

自動フォールト トレランスで無限プロセスを開始するには、forever ツールによって現在管理されているデーモン ジョブを一覧表示することもできます。

forever list

注: Node.js で無限 while ループを使用する必要はありません。Node.js http サーバーを起動すると、停止するように指示されるまで実行され続けます。

サーバーの起動、再起動、停電などの場合、Forever は新しいプロセスを自動的に生成し、自動フォールト トレランスを提供します。

それが役立つことを願っています。

于 2012-12-13T08:53:13.733 に答える