package com.nantian.ecm.cebecm.ecmdownloadcenter.quartz;
import java.text.ParseException;
import java.util.*;
import org.apache.log4j.Logger;
import org.quartz.*;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* Quartz Job 管理类
*
* 封装了使用到的各种Job操作
*
* @author ldd
*
*/
public class QuartzJobManager implements ApplicationContextAware{
private Logger logger = Logger.getLogger(getClass());
private static final String SCHEDULER_FACTORY_NAME = "schedulerFactory";
private static final int STATE_ERROR = -2;
private Scheduler scheduler;
/**
* 获取全部任务名称列表
*
* @return Job名称List
*/
public String[] readJobs() {
try {
String[] jobs = scheduler.getTriggerNames(scheduler.DEFAULT_GROUP);
return jobs;
} catch (SchedulerException e) {
logger.error("获取任务列表时出错", e);
return null;
}
}
/**
* 获取全部任务状态
*
* @return 关键字为Job名称,值为任务状态
*/
public Map readJobsState() {
String[] jobs = readJobs();
if (jobs != null) {
Map jobsMap = new HashMap();
for (int i = 0; i < jobs.length; i++) {
String job = jobs[i];
int jobState = readjobState(job);
jobsMap.put(job, jobState);
}
return jobsMap;
} else {
return null;
}
}
/**
* 获取Job状态
*
*
* @param jobName
* Job名称
* @return job状态: state的值代表该任务触发器的状态:
*
* STATE_BLOCKED 4 STATE_COMPLETE 2 STATE_ERROR 3 STATE_NONE -1
* STATE_NORMAL 0 STATE_PAUSED 1
*
*/
public int readjobState(String jobName) {
int triggerState = STATE_ERROR;
try {
triggerState = scheduler.getTriggerState(jobName,
scheduler.DEFAULT_GROUP);
} catch (SchedulerException e) {
logger.error("获取任务状态=" + jobName + " 出错!", e);
} finally {
}
return triggerState;
}
/**
* 暂停Job
*
* @param jobName
* job名称
* @return 暂停后的job状态
*/
public int pauseJob(String jobName) {
int triggerState = STATE_ERROR;
try {
scheduler.pauseTrigger(jobName, scheduler.DEFAULT_GROUP);
triggerState = scheduler.getTriggerState(jobName,
scheduler.DEFAULT_GROUP);
} catch (SchedulerException e) {
logger.error("暂停任务=" + jobName + " 出错!", e);
} finally {
}
return triggerState;
}
/**
* 启用Job
*
* @param jobName
* job名称
* @return 启用后的job 状态
*/
public int resumeJob(String jobName) {
int triggerState = STATE_ERROR;
try {
scheduler.resumeTrigger(jobName, scheduler.DEFAULT_GROUP);
triggerState = scheduler.getTriggerState(jobName,
scheduler.DEFAULT_GROUP);
} catch (SchedulerException e) {
logger.error("恢复任务=" + jobName + " 出错!", e);
} finally {
}
return triggerState;
}
/**
* 新增任务
*
* @param jobName
* @param job
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public void addJob(String jobName, Job job, String time)
throws SchedulerException, ParseException {
JobDetail jobDetail = new JobDetail(jobName, scheduler.DEFAULT_GROUP, job
.getClass());
CronTrigger trigger = new CronTrigger(jobName, scheduler.DEFAULT_MANUAL_TRIGGERS);
trigger.setCronExpression(time);
scheduler.scheduleJob(jobDetail, trigger);
if (!scheduler.isShutdown())
scheduler.start();
}
/**
* 更新任务时间
*
* @param jobName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public void modifyJobTime(String jobName, String time)
throws SchedulerException, ParseException {
Trigger trigger = scheduler.getTrigger(jobName, scheduler.DEFAULT_MANUAL_TRIGGERS);
if (trigger != null) {
CronTrigger ct = (CronTrigger) trigger;
ct.setCronExpression(time);
scheduler.resumeTrigger(jobName, scheduler.DEFAULT_MANUAL_TRIGGERS);
}
}
/**
* 使用默认触发器名称
* @param jobName
* @throws SchedulerException
*/
public void removeJob(String jobName) throws SchedulerException {
scheduler.pauseTrigger(jobName, scheduler.DEFAULT_MANUAL_TRIGGERS);// 停止触发器
scheduler.unscheduleJob(jobName, scheduler.DEFAULT_MANUAL_TRIGGERS);// 移除触发器
scheduler.deleteJob(jobName, scheduler.DEFAULT_GROUP);// 删除任务
}
/**
* 重新设置Trigger表达式
*
* @param jobName
* @param cronExpression
*/
public void updateTrigger(String jobName, String cronExpression) {
try {
CronTrigger t = (CronTrigger) scheduler.getTrigger(jobName,
scheduler.DEFAULT_GROUP);
try {
t.setCronExpression(cronExpression);
logger.info("Trigger=" + jobName + ",from ["
+ t.getCronExpression() + "] change to ["
+ cronExpression + "]");
} catch (ParseException e) {
logger.error("设置Trigger=" + jobName + " cronExpression="
+ cronExpression + " 出错!", e);
}
} catch (SchedulerException e) {
logger.error("获取Trigger=" + jobName + " 出错!", e);
}
}
@Override
public void setApplicationContext(ApplicationContext ctx)
throws BeansException {
scheduler = (org.quartz.impl.StdScheduler) ctx
.getBean(SCHEDULER_FACTORY_NAME);
}
}
相关推荐
Spring Quartz如何动态配置时间
spring quartz 非配置动态定时
spring mvc quartz 动态设置时间,可以实现任务调度的暂停和重启,在页面实现一个功能,可以动态设置调度的表达式,可以开启暂停任务调度
各种企业应用几乎都会碰到任务调度的需求,就拿论坛来说:每隔半个小时生成精华文章的RSS文件,每天凌晨统计论坛用户的积分排名,每隔30分钟执行锁定 用户解锁任务。对于一个典型的MIS系统来说,在每月1号凌晨统计上...
Spring Quartz 动态暂停、恢复、修改定时任务的一个demo,使用maven构建,框架采用spring springmvc jpa,数据库mysql,含数据库脚本,运行可用,页面访问地址http://localhost:8080/quartz_demo/quartz/list
java spring quartz 实现的动态定时任务,可以动态添加高度任务
spring quartz
java中spring quartz定时任务demo,里面包含项目所需的quartz.jar, spring.jar包,配置文件等,可直接运行使用
spring quartz类全包spring quartz类全包
关于spring中quartz的配置
Spring+Quartz定时任务Demo,导入工程就能直接运行,applicationContext.xml设置定时任务触发器
上一次传错了资源了,这个是正确的,包含quartz动态定时任务的
spring+quartz demo,下载后即可运行,很强大哦....
spring注解Quartz定时执行功能
springquartz动态任务添加删除等功能
spring的quartz使用实例,spring的quartz使用实例
Quartz定时器。Spring中Quartz的配置
Spring_QuartZDemo
利用spring的Quartz做任务调度所需要的所有jar包
Spring Quartz定时任务 jar包