一、說明
quartz採用cron表達的方式設定超時,如果瞭解linux的crontab功能的朋友應該比較容易理解,此處不介紹cron表達試,如果需要學習請找google或者百度
二、示例程序
1、maven配置
<dependency>
<groupId>quartz</groupId>
<artifactId>quartz</artifactId>
<version>1.5.2</version>
</dependency>
2、程序代碼
public class MySchedulerManager {
private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
// 添加定時任務,傳入的微cron表達式
public void scheduleJob(String cronEx) {
String jobName = "jobName";
String jobGroupName = "jobGroupName";
String triggerGroupName = "triggerGroupName";
try {
Scheduler sched = gSchedulerFactory.getScheduler();
// 先刪除原有的定時任務
removeJob(jobName, jobGroupName, triggerGroupName);
// 安排任務,設定超時執行的方法
JobDetail jobDetail = new MyJobDetail(jobName, jobGroupName);
// 觸發器
CronTrigger trigger = new CronTrigger(jobDetail.getName(), triggerGroupName, cronEx);
sched.scheduleJob(jobDetail, trigger);
// 啓動任務
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 刪除定時任務
public void removeJob(String jobName, String jobGroupName, String triggerGroupName) {
try {
Scheduler sched = gSchedulerFactory.getScheduler();
sched.pauseTrigger(jobName, triggerGroupName);// 停止觸發器
sched.unscheduleJob(jobName, triggerGroupName);// 移除觸發器
sched.deleteJob(jobName, jobGroupName);// 刪除任務
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
// 超時執行類
class MyJobDetail extends JobDetail {
private static final long serialVersionUID = 1L;
public MyJobDetail(String name, String group) {
setName(name);
setGroup(group);
setJobClass(SysQuartzJobImpl.class);
}
public static class SysQuartzJobImpl implements Job {
// 超時執行的方法
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("=====Execute====");
}
}
}