我有一个要求,我需要在特定的时间间隔内执行 n 个任务。我有一个数据库,其中包含执行任务所需的值 - java,我有一个在 Windows 平台上配置的 Apache 网络服务器。
有人可以指导我完成这项任务吗。
最佳答案
您可以使用 Quartz api为了这个目的。
Quartz 是易于使用的调度 API,并进行调度的初始化。
您可以对毫秒和重复作业使用简单触发器并设置重复间隔。 Advance Trigger CronTrigger 的工作原理与 unix cron 完全相同。在 CronTrigger 中,我们可以定义选定的日期,例如每周三、周五、每月和每年。
这是一个示例 tutorial解释了如何使用它
带有简单 Servlet 的 Quartz
网络.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>
初始化Servlet.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);
}
}
我的工作.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 ");
}
}
关于java - 定时运行任务java,apache,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982932/