package com.tv189.timed.task.quartz;
import com.tv189.timed.task.dao.Schedulers;
import com.tv189.timed.task.pojo.CscheduleTrigger;
import com.tv189.timed.task.service.QuartzService;
import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* @author xhy
* @create 2018-06-05 11:19
* @desc
**/
@SuppressWarnings("restriction")
@Configuration
@EnableScheduling
@Component
public class quartzTsak {
private static final Logger logger = (Logger) LoggerFactory.getLogger(quartzTsak.class);
@Resource(name = "scheduler")
private Scheduler scheduler;
@Autowired
private QuartzService quartzService;
@Scheduled(cron = "0/10 * * * * ?")
public void quartzTaskToUpdate() {
try {
//查询出数据库中所有的定时任务
List<CscheduleTrigger> jobList = quartzService.taskList();
logger.info("joblist---------------->" + jobList);
if (jobList != null) {
for (CscheduleTrigger scheduleJob : jobList) {
logger.info("schedeuleJob-------------------->" + scheduleJob.toString());
String status = scheduleJob.getStatus(); //该任务触发器目前的状态
logger.info("status------------>" + status);
TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getTriggerName(), scheduleJob.getTriggerGroup());//触发器的名称,分组
logger.info("triggerKey-------------------->" + triggerKey.getGroup() + "" + triggerKey.getName());
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);//查询quartz是否有相同的数据
logger.info("trigger-------------------->" + trigger);
//说明本条任务还没有添加到quartz中
if (null == trigger) {
if (status.equals("0")) {//如果是禁用,则不用创建触发器
continue;
}
JobDetail jobDetail = null;
try {
//创建JobDetail(数据库中job_name存的任务全路径,这里就可以动态的把任务注入到JobDetail中)
jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(scheduleJob.getJobName()))
.withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).build();
logger.info("jobDetail---------------->" + JobDetail.class.toString());
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob
.getCron());
logger.info("shceduleBuilder------------>" + scheduleBuilder.getClass().toString());
//按新的cronExpression表达式构建一个新的trigger
trigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getTriggerName(), scheduleJob.getTriggerGroup())
.withSchedule(scheduleBuilder.withMisfireHandlingInstructionDoNothing()).withPriority(scheduleJob.getPriority()).build();
logger.info("trigger-------------------->" + trigger.toString());
//把trigger和jobDetail注入到调度器
scheduler.scheduleJob((JobDetail) jobDetail, trigger);
} catch (Exception e) {
// TODO Auto-generated catch block
logger.error("定时任务每日添加触发器任务异常,在quartzTsak的方法quartzTaskToUpdate中,异常信息:", e);
}
} else {//说明查出来的这条任务,已经设置到quartz中了
// Trigger已存在,先判断是否需要删除,如果不需要,再判定是否时间有变化
if (status.equals("0")) { //如果是禁用,从quartz中删除这条任务
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
scheduler.deleteJob(jobKey);
continue;
}
String searchCron = scheduleJob.getCron(); //获取数据库的
logger.info("searchcron----------------------->" + searchCron);
String currentCron = trigger.getCronExpression();
logger.info("cwrentCron----------------------->" + currentCron);
if (!searchCron.equals(currentCron)) { //说明该任务有变化,需要更新quartz中的对应的记录
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(searchCron);
logger.info("schedidleBuilder------------->" + scheduleBuilder.toString());
//按新的cronExpression表达式重新构建trigger
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
.withSchedule(scheduleBuilder.withMisfireHandlingInstructionDoNothing()).withPriority(scheduleJob.getPriority()).build();
logger.info("trigger---------------------->" + trigger.toString());
//按新的trigger重新设置job执行
scheduler.rescheduleJob(triggerKey, trigger);
}
}
}
}
} catch (Exception e) {
logger.error("定时任务每日刷新触发器任务异常,在quartzTsak的方法quartzTaskToUpdate中,异常信息:", e);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
maven+springboot+myBatis+quartz+mysql+Layui动态页面管理quartz定时任务(有sql...
共419个文件
gif:156个
xml:99个
js:49个
需积分: 38 41 下载量 179 浏览量
2018-12-12
18:36:50
上传
评论 4
收藏 7.25MB ZIP 举报
温馨提示
一套完整的quartz定时任务(如有不明白的看在下面讨论提问)。
资源推荐
资源详情
资源评论
收起资源包目录
maven+springboot+myBatis+quartz+mysql+Layui动态页面管理quartz定时任务(有sql文件) (419个子文件)
layui.css 52KB
layui.css 50KB
about.css 26KB
backstage.css 23KB
layer.css 14KB
layer.css 14KB
layui.mobile.css 10KB
layui.mobile.css 10KB
xanadu.css 8KB
main.css 8KB
laydate.css 7KB
laydate.css 7KB
metroStyle.css 6KB
global.css 4KB
personal.css 4KB
tree.css 3KB
common.css 3KB
login.css 1KB
code.css 1KB
code.css 1KB
font.css 505B
quartz问题解决方案.doc 116KB
quartz技术文档.doc 75KB
quartz操作文档.doc 40KB
定时异常接口文档.doc 15KB
iconfont.eot 48KB
iconfont.eot 37KB
iconfont.eot 32KB
59.gif 10KB
59.gif 10KB
22.gif 10KB
22.gif 10KB
24.gif 8KB
24.gif 8KB
13.gif 7KB
13.gif 7KB
16.gif 7KB
16.gif 7KB
39.gif 6KB
39.gif 6KB
64.gif 6KB
64.gif 6KB
63.gif 6KB
63.gif 6KB
50.gif 6KB
50.gif 6KB
loading-0.gif 6KB
loading-0.gif 6KB
4.gif 6KB
4.gif 6KB
1.gif 5KB
1.gif 5KB
42.gif 5KB
42.gif 5KB
71.gif 5KB
71.gif 5KB
21.gif 5KB
21.gif 5KB
20.gif 5KB
20.gif 5KB
29.gif 5KB
29.gif 5KB
metro.gif 5KB
70.gif 4KB
70.gif 4KB
5.gif 4KB
5.gif 4KB
17.gif 4KB
17.gif 4KB
27.gif 4KB
27.gif 4KB
9.gif 4KB
9.gif 4KB
44.gif 4KB
44.gif 4KB
11.gif 4KB
11.gif 4KB
8.gif 4KB
8.gif 4KB
3.gif 4KB
3.gif 4KB
23.gif 4KB
23.gif 4KB
34.gif 4KB
34.gif 4KB
41.gif 4KB
41.gif 4KB
38.gif 4KB
38.gif 4KB
65.gif 3KB
65.gif 3KB
32.gif 3KB
32.gif 3KB
45.gif 3KB
45.gif 3KB
7.gif 3KB
7.gif 3KB
12.gif 3KB
12.gif 3KB
26.gif 3KB
共 419 条
- 1
- 2
- 3
- 4
- 5
资源评论
STENY_雨落倾城
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功