java起一个定时任务,其实不难,代码很简单,只要你知道方法,2分钟就搞掂了。
定时任务控制类:
package com.comit.sc.job.dms;
import java.util.Calendar;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import com.comit.sc.job.action.DmsTimedTaskJobAction;
/**
* @author zyf
* @TODO 定时任务控制类
*
*/
public class DmsTimedTaskJob implements ServletContextListener {
@SuppressWarnings("unused")
private static final SimpleTrigger CronTrigger = null;
public static void main(String[] args){
try {
test();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void test() throws Exception{
//通过SchedulerFactory来获取一个调度器
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler;
try {
scheduler = schedulerFactory.getScheduler();
//引进作业程序
JobDetail jobDetail =
new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class);
//new一个触发器
//SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
CronTrigger trigger = new CronTrigger("Test", null, "0 0 9 * * ?"); //表示每天9点执行
//设置作业启动时间
//long ctime = System.currentTimeMillis()+1000*30; //表示30秒之后启动 测试时用1000*5
//simpleTrigger.setStartTime(new Date(ctime));
Calendar cal = Calendar.getInstance();
trigger.setStartTime(cal.getTime());
//设置作业执行间隔
//simpleTrigger.setRepeatInterval(1000*18000); //设置成每天5个小时提醒一次18000 测试时用300
//设置作业执行次数
//simpleTrigger.setRepeatCount(-1); //测试时用10,-1表示无限次
//设置作业执行优先级默认为5
// simpleTrigger.setPriority(10);
//作业和触发器设置到调度器中
scheduler.scheduleJob(jobDetail, trigger);
//启动调度器
scheduler.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
System.out.println("启动定时任务失败!");
}
}
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
//System.out.println("启动触发器");
try {
test();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
//System.out.println("关闭触发器");
}
}
上述方法就已经启动了一个定时器,每天早上9点执行。
注解:
JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class);
这一行代码引进一个作业,时间片到了,就会执行DmsTimedTaskJobAction类的execute方法。
CronTrigger trigger = new CronTrigger("Test", null, "0 0 9 * * ?"); //表示每天9点执行
这一行代码产生一个定时器对象,并规定在每天早上9点钟就会执行。
scheduler.scheduleJob(jobDetail, trigger);
这一行代码将定时器和作业程序关联,实现定时执行作业的效果。
定时任务控制类讲解到此。
下面介绍具体的作业程序。
定时任务具体作业类:
package com.comit.sc.job.action;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.comit.dockapply.service.DockApplyService;
import com.comit.portlicenceinfo.service.PortLicenceInfoService;
/**
* 描述:定时任务 实体执行类
*
* @author zyf
*
*/
public class DmsTimedTaskJobAction implements Job{
/**
* 序列号
*/
private static final long serialVersionUID = 1427096854754L;
public DmsTimedTaskJobAction() throws Exception{
super();
}
/**
* 所有需要执行的定时任务,都要写在这个方法体内
*/
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("=============================================================================================");
System.out.println(new SimpleDateFormat("yy年MM月dd日 hh:mm:ss").format(new Date()));
try {
System.out.println("********证书过期提前短信通知定时任务启动!********");
//这里添加具体需要执行的方法,这里把我系统中的方法去掉了
System.out.println("********证书过期提前短信通知定时任务顺利结束!********");
} catch (Exception e) {
System.out.println("********证书过期提前短信通知定时任务执行失败!********");
}
System.out.println("=============================================================================================");
}
}
这个类就没什么好讲的了。一看就懂了。
尾注:对于如何定义这个定时任务的执行时间,大家可以参考下面这个链接的介绍,感谢这位网友的热情分享。http://free0007.iteye.com/blog/1687936