美文网首页
QuartzManager

QuartzManager

作者: 牧祎徉 | 来源:发表于2020-04-27 22:57 被阅读0次

package com.cg.vboot.common.quartz.utils;

import com.cg.vboot.common.domain.ScheduleJob;

import org.apache.log4j.Logger;

import org.quartz.*;

import org.quartz.DateBuilder.IntervalUnit;

import org.quartz.impl.matchers.GroupMatcher;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.ArrayList;

import java.util.List;

import java.util.Set;

/**

*

*

* @title: QuartzManager.java

* @description: 计划任务管理

*

*/

@Service

public class QuartzManager {

public final Logger log = Logger.getLogger(this.getClass());

// private SchedulerFactoryBean schedulerFactoryBean

// =SpringContextHolder.getBean(SchedulerFactoryBean.class);

// @Autowired

// @Qualifier("schedulerFactoryBean")

// private SchedulerFactoryBean schedulerFactoryBean;

@Autowired

private Scheduler scheduler;

/**

* 添加任务

*

* @param scheduleJob

* @throws SchedulerException

*/

public void addJob(ScheduleJob job) {

try {

// 创建jobDetail实例,绑定Job实现类

// 指明job的名称,所在组的名称,以及绑定job类

Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(job.getBeanClass()).newInstance()

.getClass());

JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(job.getJobName(), job.getJobGroup())// 任务名称和组构成任务key

.build();

// 定义调度触发规则

// 使用cornTrigger规则

Trigger trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())// 触发器key

.startAt(DateBuilder.futureDate(1, IntervalUnit.SECOND))

.withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression())).startNow().build();

// 把作业和触发器注册到任务调度中

scheduler.scheduleJob(jobDetail, trigger);

// 启动

if (!scheduler.isShutdown()) {

scheduler.start();

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 获取所有计划中的任务列表

*

* @return

* @throws SchedulerException

*/

public List<ScheduleJob> getAllJob() throws SchedulerException {

GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();

Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);

List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();

for (JobKey jobKey : jobKeys) {

List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);

for (Trigger trigger : triggers) {

ScheduleJob job = new ScheduleJob();

job.setJobName(jobKey.getName());

job.setJobGroup(jobKey.getGroup());

job.setDescription("触发器:" + trigger.getKey());

Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());

job.setJobStatus(triggerState.name());

if (trigger instanceof CronTrigger) {

CronTrigger cronTrigger = (CronTrigger) trigger;

String cronExpression = cronTrigger.getCronExpression();

job.setCronExpression(cronExpression);

}

jobList.add(job);

}

}

return jobList;

}

/**

* 所有正在运行的job

*

* @return

* @throws SchedulerException

*/

public List<ScheduleJob> getRunningJob() throws SchedulerException {

List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();

List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());

for (JobExecutionContext executingJob : executingJobs) {

ScheduleJob job = new ScheduleJob();

JobDetail jobDetail = executingJob.getJobDetail();

JobKey jobKey = jobDetail.getKey();

Trigger trigger = executingJob.getTrigger();

job.setJobName(jobKey.getName());

job.setJobGroup(jobKey.getGroup());

job.setDescription("触发器:" + trigger.getKey());

Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());

job.setJobStatus(triggerState.name());

if (trigger instanceof CronTrigger) {

CronTrigger cronTrigger = (CronTrigger) trigger;

String cronExpression = cronTrigger.getCronExpression();

job.setCronExpression(cronExpression);

}

jobList.add(job);

}

return jobList;

}

/**

* 暂停一个job

*

* @param scheduleJob

* @throws SchedulerException

*/

public void pauseJob(ScheduleJob scheduleJob) throws SchedulerException {

JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

scheduler.pauseJob(jobKey);

}

/**

* 恢复一个job

*

* @param scheduleJob

* @throws SchedulerException

*/

public void resumeJob(ScheduleJob scheduleJob) throws SchedulerException {

JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

scheduler.resumeJob(jobKey);

}

/**

* 删除一个job

*

* @param scheduleJob

* @throws SchedulerException

*/

public void deleteJob(ScheduleJob scheduleJob) throws SchedulerException {

JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

scheduler.deleteJob(jobKey);

}

/**

* 立即执行job

*

* @param scheduleJob

* @throws SchedulerException

*/

public void runAJobNow(ScheduleJob scheduleJob) throws SchedulerException {

JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

scheduler.triggerJob(jobKey);

}

/**

* 更新job时间表达式

*

* @param scheduleJob

* @throws SchedulerException

*/

public void updateJobCron(ScheduleJob scheduleJob) throws SchedulerException {

TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());

CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);

CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());

trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();

scheduler.rescheduleJob(triggerKey, trigger);

}

}

相关文章

网友评论

      本文标题:QuartzManager

      本文链接:https://www.haomeiwen.com/subject/pfzuwhtx.html