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

spring boot快速集成Quartz定时器

2018-08-20 10:43 197 查看

1、添加Maven依赖

<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.6</version>
</dependency>

2、创建工具类,初始化Scheduler工厂类

public class QuartzManager {
private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();
private static String JOB_GROUP_NAME = "JOB_GROUP_NAME ";
private static String TRIGGER_GROUP_NAME = "TRIGGER_GROUP_NAME";
}

3、封装添加任务方法

/**
* @param jobName 任务名
* @param cls     任务
* @param time    时间设置,参考quartz说明文档
* @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @Title: QuartzManager.java
* @Copyright: Copyright (c) 2014
* @author Comsys-LZP
* @date 2014-6-26 下午03:47:44
* @version V2.0
*/
@SuppressWarnings("unchecked")
public static void addJob(String jobName, Class cls, String time) {
try {
Scheduler sched = gSchedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类
// 触发器
CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
trigger.setCronExpression(time);// 触发器时间设定
sched.scheduleJob(jobDetail, trigger);
// 启动
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* @param jobName
* @param cls
* @param time
* @param params  传递的参数
*/
public static void addJobTraParam(String jobName, Class cls, String time, Object params) {
try {
Scheduler sched = gSchedulerFactory.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, cls);// 任务名,任务组,任务执行类
jobDetail.getJobDataMap().put("data", params);
// 触发器
CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
trigger.setCronExpression(time);// 触发器时间设定
sched.scheduleJob(jobDetail, trigger);
// 启动
if (!sched.isShutdown()) {
sched.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}

任务组名和触发器组名此处使用默认组名,可自行定义或动态传入参数设置。

4、创建定时任务

/**
* 定时任务类 实现job接口
*/
public class MyJob implements Job {

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap map =  context.getMergedJobDataMap();//获取任务参数
Map<String,Object> data = (Map<String, Object>) map.get("data");
System.out.println("我被触发了嘻嘻");
}
}

5、controller调用

String cron = "0 1 0 * * ? *";
//若有参数
Map params = new HashMap();
params.put("p","我是参数");

QuartzManager.addJob("jobName" , MyJob.class, cron,params);
cron表达式分为两种
1:每天什么时候执行,比如每天下午2点执行,cron为 0 0 14 * * ?
2:每隔多少秒执行,比如每隔30秒执行一次,cron为 0/30 * * * * ?
生成cron可访问在线生成Cron:http://www.pppet.net/
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: