说明
本文基于大佬的非maven版脚手架增加的功能,大佬的脚手架是MySQL版本的,并且不再更新了,我对它进行了数据库移植,在下篇文章我会写出Oracle的移植相关细节。大佬的脚手架地址:Arthur/irs,我引入了quartz.jar,关于spring和springmvc+mybatis的配置不详细说,运用了mybatis的generator生成相关的后台代码,前台代码就不写了。
界面展示
数据库表设计
JOB_ID设置为主键
数据序列
create sequence SEQ_TB_JOBS
minvalue 1
maxvalue 9999999999999999999999999999
start with 25
increment by 1
cache 20;
Quartz工具类
public class QuartzManagerUtil {
private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
/**
* @Description 添加一个定时任务
*
* @param jobName
* 任务名
* @param jobGroupName
* 任务组名
* @param triggerName
* 触发器名
* @param triggerGroupName
* 触发器组名
* @param jobClass
* 任务
* @param cron
* 事件表达式
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName,
Class jobClass, String cron) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
// 任务名,任务组,任务执行类
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
// 触发器
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
// 触发器名,触发器组
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();
// 触发器时间设定
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
// 创建Trigger对象
CronTrigger trigger = (CronTrigger) triggerBuilder.build();
// 调度容器设置jobDetail和Trigger
scheduler.scheduleJob(jobDetail, trigger);
// 启动
if (!scheduler.isShutdown()) {
scheduler.start();
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* @Description: 修改一个任务的触发时间
*
* @param jobName
* 任务名
* @param jobGroupName
* 任务组名
* @param triggerName
* 触发器名
* @param triggerGroupName
* 触发器组名
* @param cron
* 时间表达式
*/
public static void modifyJobCron(String jobName, String jobGroupName, String triggerName, String triggerGroupName,
String cron) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
CronTrigger cronTrigger = (CronTrigger) scheduler.getTrigger(triggerKey);
if (cronTrigger == null) {
return;
}
String oldTime = cronTrigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(cron)) {
/** 方式一:调用 rescheduleJob开始 */
// 触发器
TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
// 触发器名,触发器组
triggerBuilder.withIdentity(triggerName, triggerGroupName);
triggerBuilder.startNow();
// 触发器时间设定
triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
// 创建Trigger对象
cronTrigger = (CronTrigger) triggerBuilder.build();
// 修改一个任务的触发器时间
scheduler.rescheduleJob(triggerKey, cronTrigger);
/** 方法二:先删除,然后创建一个新的job */
/*
* JobDetail jobDetail =
* scheduler.getJobDetail(JobKey.jobKey(jobName, jobGroupName));
* Class<? extends Job> jobClass = jobDetail.getJobClass();
* removeJob(jobName, jobGroupName, triggerName,
* triggerGroupName); addJob(jobName, jobGroupName, triggerName,
* triggerGroupName, jobClass, cron);
*/
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* @Description 删除一个任务
*
* @param jobName
* 任务名
* @param jobGroupName
* 任务组名
* @param triggerName
* 触发器名
* @param triggerGroupName
* 触发器组名
*/
public static void deleteJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
scheduler.pauseTrigger(triggerKey);// 停止触发器
scheduler.unscheduleJob(triggerKey);// 移除触发器
scheduler.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* @Description 停用所有任务
*
*/
public static void pauseAllJob() {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.pauseAll();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* @Description 启用所有任务
*/
public static void resumeAll(){
try {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.resumeAll();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* @Description 停用某个任务
*
* @param jobName
* 任务名
* @param jobGroupName
* 任务组名
*/
public static void pauseJob(String jobName, String jobGroupName) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.pauseJob(JobKey.jobKey(jobName, jobGroupName));
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* @Description 启用某个任务
* @param jobName
* 任务名
* @param jobGroupName
* 任务组名
*/
public static void resumeJob(String jobName, String jobGroupName) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.resumeJob(JobKey.jobKey(jobName, jobGroupName));
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* 关闭所有任务
*/
public static void shutDownAll(){
try {
Scheduler scheduler = schedulerFactory.getScheduler();
if(!scheduler.isShutdown()){
scheduler.shutdown();
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* 启动所有任务
*/
public static void startAll(){
try {
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
/**
* 立即运行一次任务
*/
public static void runOnce(String jobName, String jobGroupN