Программа сервлетов как услуга - PullRequest
0 голосов
/ 16 марта 2009

У меня есть программа сервлета Java, которая запускается при запуске tomcat. Я упомянул программу как загрузку при запуске. Я не использую HTTP-запрос или ответ.

Что мне нужно, так это то, что мне нужно запустить программу как службу или иметь автоматическое обновление через определенный интервал времени. Как это сделать? Может кто-нибудь помочь мне!

Спасибо, Гопал.

Ответы [ 4 ]

3 голосов
/ 16 марта 2009

Кварц - отличная идея, но может быть немного излишним в зависимости от того, что вам нужно. Я думаю, что вы действительно пытаетесь втиснуть свой сервис в сервлет, когда вы на самом деле не слушаете входящие HttpServletRequests. Вместо этого рассмотрите возможность использования ServletContextListener для запуска службы и таймера, как предложил Морис:

web.xml:

<listener>
    <listener-class>com.myCompany.MyListener</listener-class>
</listener>

И тогда ваш класс выглядит так:

public class MyListener implements ServletContextListener {

    /** the interval to wait per service call - 1 minute */
    private static final int INTERVAL = 60 * 60 * 1000;

    /** the interval to wait before starting up the service - 10 seconds */
    private static final int STARTUP_WAIT = 10 * 1000;

    private MyService service = new MyService();
    private Timer myTimer;

    public void contextDestroyed(ServletContextEvent sce) {
        service.shutdown();
        if (myTimer != null)
            myTimer.cancel();
    }

    public void contextInitialized(ServletContextEvent sce) {
        myTimer = new Timer();
        myTimer.schedule(new TimerTask() {
            public void run() {
                myService.provideSomething();
            }
        },STARTUP_WAIT, INTERVAL
      );
    }
}
1 голос
/ 16 марта 2009

Рекомендую использовать Кварц . Вы можете определить запланированное задание с помощью кварца.

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzTest {
   public static void main(String[] args) {
     try {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();

        scheduler.shutdown();
      } catch (SchedulerException se) {
        se.printStackTrace();
      }
  }
}
0 голосов
/ 16 марта 2009

Иногда я использую таймер для периодического выполнения HTTP-запросов:

    timer = new Timer(true);
    timer.scheduleAtFixedRate(
        new TimerTask() {
            URL url = new URL(timerUrl);
            public void run() {
                try {
                    url.getContent();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        },
        period,
        period);
0 голосов
/ 16 марта 2009

tomcat выполняет автоматическое обновление каждый раз, когда файл .war изменяется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...