Commit b40f7bc7 authored by 张森's avatar 张森

quartz持久化到数据库

parent cf9b11aa
......@@ -44,8 +44,8 @@
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
......
......@@ -104,15 +104,19 @@ public class JobService implements IJobService {
@Autowired
private RedisUtils redisUtils;
@Autowired
private QuartzManager quartzManager;
@Override
@Transactional
public void initScheduler() {
// TODO Auto-generated method stub
log.debug("======================initScheduler===========================");
initTaskJob();
initPlanTaskJob();
initMsgJob();
// 已持久化到数据库,所以不需要这儿初始化
// initTaskJob();
// initPlanTaskJob();
// initMsgJob();
}
@Override
......@@ -122,7 +126,7 @@ public class JobService implements IJobService {
SimpleDateFormat formatter = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
String cronDate = formatter.format(time);
log.debug("addJob==jobName==" + jobName);
QuartzManager.addJob(jobName, jobType, id, getJobInstance(name).getClass(), cronDate);
quartzManager.addJob(jobName, jobType, id, getJobInstance(name).getClass(), cronDate);
}
}
......@@ -630,7 +634,7 @@ public class JobService implements IJobService {
// }
private void removeJob(String jobName) {
log.debug("removeJob==jobName==" + jobName);
QuartzManager.removeJob(jobName);
// quartzManager.removeJob(jobName);
}
private Job getJobInstance(String type) {
......
......@@ -4,24 +4,27 @@ import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class MsgJobService implements Job{
private IJobService jobService;
@Autowired
private JobService jobService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
setJobService((IJobService) jobDataMap.get("jobService"));
jobService.msgJobPerform(Long.valueOf(jobDataMap.get("id").toString()),jobDataMap.get("jobType").toString(),jobDataMap.get("jobName").toString());
}
public IJobService getJobService() {
public JobService getJobService() {
return jobService;
}
public void setJobService(IJobService jobService) {
public void setJobService(JobService jobService) {
this.jobService = jobService;
}
}
......@@ -4,24 +4,26 @@ import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PlanTaskJobService implements Job {
private IJobService jobService;
@Autowired
private JobService jobService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
setJobService((IJobService) jobDataMap.get("jobService"));
jobService.planTaskJobPerform(Long.valueOf(jobDataMap.get("id").toString()),jobDataMap.get("jobType").toString(),jobDataMap.get("jobName").toString());
}
public IJobService getJobService() {
return jobService;
}
public void setJobService(IJobService jobService) {
public void setJobService(JobService jobService) {
this.jobService = jobService;
}
......
......@@ -16,40 +16,48 @@ import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import com.yeejoin.amos.patrol.business.util.SpringContextUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class QuartzManager {
private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory(); //创建一个SchedulerFactory工厂实例
private static String JOB_GROUP_NAME = "FH_JOBGROUP_NAME"; //任务组
private static String TRIGGER_GROUP_NAME = "FH_TRIGGERGROUP_NAME"; //触发器组
@Autowired
private Scheduler scheduler;
/**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名
* @param jobName 任务名
* @param cls 任务
* @param time 时间设置,参考quartz说明文档
*/
public static void addJob(String jobName,String jobType,long id, Class<? extends Job> cls, String time) {
try {
Scheduler sched = gSchedulerFactory.getScheduler();
public void addJob(String jobName,String jobType,long id, Class<? extends Job> cls, String time) {
try {
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("jobName", jobName);
jobDataMap.put("id", id);
jobDataMap.put("jobType", jobType);
jobDataMap.put("jobService", SpringContextUtil.getJobService());
JobDetail jobDetail= JobBuilder.newJob(cls).setJobData(jobDataMap).withIdentity(jobName,JOB_GROUP_NAME).build(); //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
CronTrigger trigger = (CronTrigger) TriggerBuilder
.newTrigger() //创建一个新的TriggerBuilder来规范一个触发器
.withIdentity(jobName, TRIGGER_GROUP_NAME) //给触发器起一个名字和组名
jobDataMap.put("jobName", jobName);
jobDataMap.put("id", id);
jobDataMap.put("jobType", jobType);
//用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
JobDetail jobDetail = JobBuilder.newJob(cls)
.setJobData(jobDataMap)
.withIdentity(jobName, JOB_GROUP_NAME)
.build();
//创建一个新的TriggerBuilder来规范一个触发器
CronTrigger trigger = TriggerBuilder
.newTrigger()
.withIdentity(jobName, TRIGGER_GROUP_NAME)
.usingJobData(jobDataMap)
.startNow()
.withSchedule(CronScheduleBuilder.cronSchedule(time))
.build();
sched.scheduleJob(jobDetail, trigger);
if (!sched.isShutdown()) {
sched.start(); // 启动
}
} catch (Exception e) {
throw new RuntimeException(e);
}
scheduler.scheduleJob(jobDetail, trigger);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 (带参数)
......@@ -187,17 +195,18 @@ public class QuartzManager {
/**移除一个任务(使用默认的任务组名,触发器名,触发器组名)
* @param jobName 任务名称
*/
public static void removeJob(String jobName) {
try {
Scheduler sched = gSchedulerFactory.getScheduler();
public static void removeJob(String jobName) {
try {
// 获取Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(jobName,TRIGGER_GROUP_NAME); //通过触发器名和组名获取TriggerKey
JobKey jobKey = JobKey.jobKey(jobName, JOB_GROUP_NAME); //通过任务名和组名获取JobKey
sched.pauseTrigger(triggerKey); // 停止触发器
sched.unscheduleJob(triggerKey);// 移除触发器
sched.deleteJob(jobKey); // 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
scheduler.pauseTrigger(triggerKey); // 停止触发器
scheduler.unscheduleJob(triggerKey);// 移除触发器
scheduler.deleteJob(jobKey); // 删除任务
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**移除一个任务
......
......@@ -4,25 +4,28 @@ import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TaskJobService implements Job {
private IJobService jobService;
@Autowired
private JobService jobService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
setJobService((IJobService) jobDataMap.get("jobService"));
jobService.taskJobPerform(Long.valueOf(jobDataMap.get("id").toString()),jobDataMap.get("jobType").toString(),jobDataMap.get("jobName").toString());
}
public IJobService getJobService() {
public JobService getJobService() {
return jobService;
}
public void setJobService(IJobService jobService) {
public void setJobService(JobService jobService) {
this.jobService = jobService;
}
}
......@@ -133,4 +133,10 @@ emqx.max-inflight=1000
emqx.keep-alive-interval=10
file.url=http://39.98.45.134:9000/
\ No newline at end of file
file.url=http://39.98.45.134:9000/
# 是设置每次启动项目是否重建表结构,并且清空里面的数据,有三个选项可以选择always,never,embedded
spring.quartz.job-store-type=jdbc
spring.quartz.jdbc.initialize-schema=never
spring.quartz.scheduler-name=testScheduler
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment