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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值