0

Web バージョンを実装したいリスナープロジェクトがあります。展開時に継続的に実行する必要があります。つまり、アプリケーションがApache Tomcat 7.0.14.0にデプロイされるとすぐに、Web アプリケーションの残りの部分に影響を与えることなく、すぐに継続的にリッスン/実行を開始する必要があります。これは可能ですか?

4

2 に答える 2

1

スレッドを開始するのを忘れました

 @Override
    public void contextInitialized(ServletContextEvent arg0) {
        Thread th = new Thread();
....
th.start();
}

しかし、ExecutorServiceを使用したソリューションの方が静かです。

そして...必要に応じて、アプリケーションを自動起動する必要があります。

<load-on-startup>100</load-on-startup>
于 2012-07-23T11:39:25.207 に答える
1

あなたの説明から、Tomcat は、デプロイの次の段階に進む前に、ServletContext リスナーが完了することを期待しているようです。その場合、バックグラウンドで実行したい作業を Runnable クラスに入れることができます。

RunClassOnDeployment.java

package web.deployment;

import javax.servlet.ServletContext;

public class RunClassOnDeployment implements Runnable {

    ServletContext myServletContext; // in case you need the servelet context

    RunClassOnDeployment(ServletContext sc) {
           myServletContext = sc;
    }

    public void run() {
       Thread th = new Thread();
        try {
            for (int i = 1; i <= 100; i++) {
                System.out.println(i);
                th.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("Thread interrupted! " + e);
        }
    }
}

リスナー内で ExecutorService を使用してそれを設定します。

MyListener.java

package web.deployment;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        System.out.println("ServletContextListener destroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.submit(new RunClassOnDeployment(arg0.getServletContext()));
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <listener>
        <listener-class>web.deployment.MyListener</listener-class>
    </listener>
</web-app>

サンプルをダウンロード

于 2012-07-23T10:56:59.360 に答える