java起一个定时任务,其实不难,代码很简单,只要你知道方法,2分钟就搞掂了。java
定时任务控制类:app
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点执行。 测试
注解:code
JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class);
这一行代码引进一个做业,时间片到了,就会执行DmsTimedTaskJobAction类的execute方法。orm
CronTrigger trigger = new CronTrigger("Test", null, "0 0 9 * * ?"); //表示天天9点执行
这一行代码产生一个定时器对象,并规定在天天早上9点钟就会执行。对象
scheduler.scheduleJob(jobDetail, trigger);
这一行代码将定时器和做业程序关联,实现定时执行做业的效果。blog
定时任务控制类讲解到此。get
下面介绍具体的做业程序。servlet
定时任务具体做业类:it
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