/** *//**
* 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param jobName 任务名
* @param job 任务
* @param time时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler()
JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass())//任务名,任务组,任务执行类
//触发器
CronTrigger trigger =
new CronTrigger(jobName, TRIGGER_GROUP_NAME)//触发器名,触发器组
trigger.setCronExpression(time)//触发器时间设定
sched.scheduleJob(jobDetail,trigger)
//启动
if(!sched.isShutdown())
sched.start()
}
/** *//**
* 添加一个定时任务
* @param jobName 任务名
* @param jobGroupName 任务组名
* @param triggerName 触发器名
* @param triggerGroupName 触发器组名
* @param job 任务
* @param time时间设置,参考quartz说明文档
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName,
Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler()
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass())//任务名,任务组,任务执行类
//触发器
CronTrigger trigger =
new CronTrigger(triggerName, triggerGroupName)//触发器名,触发器组
trigger.setCronExpression(time)//触发器时间设定
sched.scheduleJob(jobDetail,trigger)
if(!sched.isShutdown())
sched.start()
}
/** *//**
* 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)
* @param jobName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String jobName,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler()
Trigger trigger = sched.getTrigger(jobName,TRIGGER_GROUP_NAME)
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger
ct.setCronExpression(time)
sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME)
}
}
/** *//**
* 修改一个任务的触发时间
* @param triggerName
* @param triggerGroupName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String triggerName,String triggerGroupName,
String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler()
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName)
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger
//修改时间
ct.setCronExpression(time)
//重启触发器
sched.resumeTrigger(triggerName,triggerGroupName)
}
}
/** *//**
* 移除一个任务(使用默认的任务组名,触发器名,触发器组名)
* @param jobName
* @throws SchedulerException
*/
public static void removeJob(String jobName)
throws SchedulerException{
Scheduler sched = sf.getScheduler()
sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME)//停止触发器
sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME)//移除触发器
sched.deleteJob(jobName,JOB_GROUP_NAME)//删除任务
}
/** *//**
* 移除一个任务
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
* @throws SchedulerException
*/
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler()
sched.pauseTrigger(triggerName,triggerGroupName)//停止触发器
sched.unscheduleJob(triggerName,triggerGroupName)//移除触发器
sched.deleteJob(jobName,jobGroupName)//删除任务
}
配置参见http://kevin19900306.iteye.com/blog/1397744
于cronExpression表达式,这里讲解一下:
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
表达式意义
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
每天早上6点
0 6 * * *
每两个小时
0 */2 * * *
晚上11点到早上8点之间每两个小时,早上八点
0 23-7/2,8 * * *
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3
1月1日早上4点
0 4 1 1 *
1.需要的jar包实现定时任务 需要quartz-1.5.1.jar和commons-logging-1.1.jar。
2.定义定时任务配置类
该类主要进行定时任务时间的设置和设置对应的定时任务类。
import org.quartz.CronTrigger
import org.quartz.JobDetail
import org.quartz.Scheduler
import org.quartz.impl.StdSchedulerFactory
public class Test{
/**
* 定时任务
*/
public static void cleanUpJob() {
try {
JobDetail jobDetail = new JobDetail()
jobDetail.setName("cleanup")
jobDetail.setJobClass(PrintJob.class)
CronTrigger trigger = new CronTrigger()
trigger.setName("cleanupTrigger")
trigger.setJobName("cleanup")
trigger.setCronExpression("0/5 * * * * ?")
Scheduler sch = StdSchedulerFactory.getDefaultScheduler()
sch.scheduleJob(jobDetail, trigger)
sch.start()
} catch (Exception e) {
e.printStackTrace()
}
}
/**
* 修改定时任务时间
*/
public static void modifyJobTime(String triggerName, String time) {
System.out.println("modify~~~~~~~~~~~~~~~~")
try {
Scheduler sched = StdSchedulerFactory.getDefaultScheduler()
System.out.println("triggerName " + triggerName)
CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerName, Scheduler.DEFAULT_GROUP)
if(trigger == null) {
return
}
String oldTime = trigger.getCronExpression()
System.out.println("oldTime " + oldTime)
if (!oldTime.equalsIgnoreCase(time)) {
System.out.println("time " + time)
// 修改时间
trigger.setCronExpression(time)
}
} catch (Exception e) {
e.printStackTrace()
throw new RuntimeException(e)
}
}
public static void main(String[] args) {
cleanUpJob()
modifyJobTime("cleanupTrigger", "0/2 * * * * ?")
}
}
3.定时任务类
该类主要定义定时任务执行的内容。
import java.text.SimpleDateFormat
import java.util.Date
import org.quartz.Job
import org.quartz.JobExecutionContext
import org.quartz.JobExecutionException
public class PrintJob implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")
String time = sdf.format(new Date())
System.out.println("print job" + time)
}
}
4.输出结果
modify~~~~~~~~~~~~~~~~
triggerName cleanupTrigger
oldTime 0/5 * * * * ?
time 0/2 * * * * ?
print job2014-12-03 17:06:40.031
print job2014-12-03 17:06:42.015
print job2014-12-03 17:06:44.016
print job2014-12-03 17:06:46.019
print job2014-12-03 17:06:48.019
print job2014-12-03 17:06:50.020
从输出的结果中可以看到,原本的定时任务为每5秒执行一次,但是由于后面对定时任务表达式做了修改,所以后来安照修改后的每2秒执行一次。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)