您的位置:首页 > 编程语言 > Java开发

java起一个定时任务,在规定的时间内自动执行

2015-12-02 15:36 746 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息