запускать задачи в назначенное время Java, Apache - PullRequest
5 голосов
/ 13 февраля 2011

У меня есть требование, где в, мне нужно выполнить n задач через определенные промежутки времени.У меня есть база данных, которая будет содержать значения, необходимые для выполнения задачи - java, и у меня настроен веб-сервер Apache на платформе Windows.

Может кто-нибудь подсказать мне, как выполнить эту задачу.

Ответы [ 2 ]

4 голосов
/ 13 февраля 2011

Вы можете использовать Кварц api для этого разлива.

Quartz - это API-интерфейс планирования, его легко использовать и инициализация планирования.

Вы можете использовать простой триггер с миллисекундами и повторными заданиями и устанавливать интервалы повторения. Advance Trigger CronTrigger работает точно так же, как Unix Cron. В CronTrigger мы можем определить выбранные дни, например, Среда, пятница, еженедельно, ежемесячно и ежегодно.

Вот пример учебника , в котором объясняется, как его использовать

Кварц с простым сервлетом

web.xml

<web-app>
 <display-name>timer</display-name>

    <servlet>
     <servlet-name>InitializeServlet</servlet-name>
     <servlet-class>com.cron.InitializeServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
    </servlet>

</web-app>

InitializeServlet.java

package com.cron;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class InitializeServlet extends HttpServlet {

 public void init() throws ServletException {

    try {
        System.out.println("Initializing NewsLetter PlugIn");

        CronScheluder objPlugin = new CronScheluder();

    }
    catch (Exception ex) {
      ex.printStackTrace();
    }

  }

}

CronScheluder.java

package com.cron;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

public class CronScheluder {

    public CronScheluder() throws Exception {

        SchedulerFactory sf = new StdSchedulerFactory();

        Scheduler sche = sf.getScheduler();

        sche.start();

        JobDetail jDetail = new JobDetail("Newsletter", "NJob", MyJob.class);

        //"0 0 12 * * ?" Fire at 12pm (noon) every day
        //"0/2 * * * * ?" Fire at every 2 seconds every day

 CronTrigger crTrigger = new CronTrigger("cronTrigger", "NJob", "0/2 * * * * ?");

        sche.scheduleJob(jDetail, crTrigger);
    }
}

MyJob.java

package com.cron;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {

    public void execute(JobExecutionContext context)
     throws JobExecutionException {

      System.out.println("Cron executing ");

    }
}
2 голосов
/ 13 февраля 2011

Вы можете сделать это через:

  • задание linux cron, которое будет запрашивать определенный URL вашего приложения через wget или curl
  • Quartz, Java-библиотека для планирования

Также Apache, похоже, не имеет никакого отношения к вашему требованию.

...