2009-03-16 2 views
0

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

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

Thanks, Gopal.

+0

, что вы имеете в виду с автоматическим обновлением? tomcat делает это сам. – Tobias

ответ

0

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

0

Я иногда использую таймер, чтобы периодически делает 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); 
1

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

3

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

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 
    ); 
    } 
} 
+0

Quartz vs TimerTasker: Обратите внимание, что механизм Timer использует экземпляр TimerTask, который используется совместно с повторными выполнением, в отличие от Quartz, который создает новый экземпляр Job для каждого выполнения. – ariso

Смежные вопросы