2011-02-13 52 views
5

我有一个需求,我需要在一定的时间间隔执行n个任务。我有一个数据库,其中将包含执行任务所需的值 - java和我有一个Windows平台上配置的Apache Web服务器。在预定的时间运行任务java,apache

有人请指导我完成此任务。

回答

4

您可以使用Quartz api进行此倾斜。

Quartz正在调度API,它易于使用并且可以进行调度的初始化。

您可以使用简单的毫秒触发并重复作业并设置重复间隔。高级触发器CronTrigger的工作原理与unix cron完全相同。在CronTrigger中,我们可以定义选定日期,例如星期三,星期五每周,每月和每年。

下面是一个简单tutorial,介绍如何用简单的servlet

的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(); 
    } 

    } 

} 

CronSchelude使用它

石英r.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

您可以通过这样做:

  • 一个将通过的wget或者请求您的应用程序的特定URL的Linux cron作业curl
  • Quartz,一个用于调度的Java库

同样,apache似乎与您的要求没有任何关系。