Quartz是一个定时任务执行框架。添加如下Maven依赖即可。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
创建任务
/**
* 创建任务
* @throws SchedulerException
*/
public static void startSchedulerJob() throws SchedulerException {
// 数据
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("a", 1);
dataMap.put("b", 2);
JobDetail jobDetail = createJobDetail("job1", "group1", dataMap);
Trigger trigger = createTrigger("trigger1", "group3", 3);
Scheduler scheduler = createScheduler();
// 将任务及其触发器放入调度器
scheduler.scheduleJob(jobDetail, trigger);
// 调度器开始调度任务
scheduler.start();
}
/**
* 创建调度器
*
* @return
* @throws SchedulerException
*/
public static Scheduler createScheduler() throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
return schedulerFactory.getScheduler();
}
/**
* 创建任务
*
* @param jobKeyName
* @param jobKeyGroup
* @param dataMap
* @return
*/
public static JobDetail createJobDetail(String jobKeyName, String jobKeyGroup, Map<String, Object> dataMap) {
JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity(jobKeyName, jobKeyGroup).build();
jobDetail.getJobDataMap().putAll(dataMap);
return jobDetail;
}
/**
* 创建触发器
*
* @param triggerKeyName
* @param triggerKeyGroup
* @param intervalInSeconds 时间间隔
* @return
*/
public static Trigger createTrigger(String triggerKeyName, String triggerKeyGroup, Integer intervalInSeconds) {
TriggerBuilder<Trigger> triggerBuild = TriggerBuilder.newTrigger();
triggerBuild.withIdentity(triggerKeyName, triggerKeyGroup);
SimpleScheduleBuilder repeatForever = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(intervalInSeconds).repeatForever();
triggerBuild.withSchedule(repeatForever);
return triggerBuild.build();
}
public static void main(String[] args) throws SchedulerException {
startSchedulerJob();
}
具体执行方法:
/**
* 具体定时任务执行类
* @author tang
*
*/
public class MyJob implements Job {
/**
* 定时任务触发的方法
*/
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("MyJob-->execute");
JobDetail jobDetail = context.getJobDetail();
System.out.println("jobKey:" + jobDetail.getKey());
System.out.println("传递的数据为:");
System.out.println("a=" + jobDetail.getJobDataMap().getInt("a"));
System.out.println("b=" + jobDetail.getJobDataMap().getInt("b"));
System.out.println("-----结束-----");
}
}