2011-02-13 54 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似乎與您的要求沒有任何關係。