Commit b40f7bc7 authored by 张森's avatar 张森

quartz持久化到数据库

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