模块一:JobInstance
页面控制台操作:
1、launch:手动触发
应用场景:针对于某些任务定时表达式指定时间尚未到达之前,就可能需要进行执行。
功能说明:立即触发任务执行一次。
后台处理:
if(this.scheduler.checkExists(jobKey)){ Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(instance.getId()+"-"+instance.getIdentifier() + "Trigger", Scheduler.DEFAULT_GROUP) .forJob(jobKey) .startNow() .build(); this.scheduler.scheduleJob(trigger); }else{ JobDataMap newJobDataMap = new JobDataMap(); newJobDataMap.put(MetaData.JOB_INSTANCE_KEY, instance); JobDetail jobDetail = JobBuilder.newJob(BaseRemoteJob.class) .withIdentity(jobKey) .storeDurably(true) .setJobData(newJobDataMap) .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(instance.getIdentifier() + "Trigger", Scheduler.DEFAULT_GROUP) .forJob(jobDetail) .startNow() .build(); this.scheduler.scheduleJob(jobDetail,trigger); } log.info("launch job {} ", jobKey);
2、set:任务属性修改
应用场景:任务的服务端表达式和别名需要修改
功能说明:a、修改任务的服务端表达式,不为* * * * * * *的情况下按照服务端表达式执行的值重新注册到quartz中。配置为* * * * * * *,则将任务从quartz中清除。
b、修改任务的别名,取代任务在服务端的唯一标识serverKey,在报警和日志信息展示更加易懂和灵活控制。
后台处理:
if(!StringUtils.isEmpty(jobInstance.getServerCronExpress())){ if(!"* * * * * *".equals(jobInstance.getServerCronExpress().trim())){ this.schedulerManager.registeJob(jobInstance); }else{ this.schedulerManager.cleanUpJob(jobInstance.getIdentifier()); } }
public void registeJob(JobInstance instance) { if(instance == null){ throw new NullPointerException("Job instance can not be null"); } JobKey instanceKey = new JobKey(instance.getIdentifier(), Scheduler.DEFAULT_GROUP); if(this.batchTempldateJobKeys.contains(instanceKey)){ log.warn("Job key for {} already in batch template, unregistry", instanceKey); return; } if(instance.getServerKeys() != null){//组任务 for(String serverKey : instance.getServerKeys().split(",")){ JobKey jobkey = new JobKey(serverKey, Scheduler.DEFAULT_GROUP); try { if(!this.scheduler.deleteJob(jobkey)){ log.warn("Delete job {} failure, maybe it's not scheduled", jobkey); } } catch (SchedulerException e) { e.printStackTrace(); } } try { if(!this.scheduler.deleteJob(instanceKey)){//If exists log.warn("Delete group job {} failure, maybe it's not scheduled", instanceKey); } } catch (SchedulerException e1) { e1.printStackTrace(); } }else{//普通任务 try { if(! this.scheduler.deleteJob(instanceKey)){ log.info("Unregistry job {}", instanceKey); } } catch (SchedulerException e1) { e1.printStackTrace(); } } JobDataMap newJobDataMap = new JobDataMap(); newJobDataMap.put(MetaData.JOB_INSTANCE_KEY, instance); JobDetail jobDetail = JobBuilder.newJob(BaseRemoteJob.class) .withIdentity(instanceKey) .storeDurably(true) .setJobData(newJobDataMap) .build(); String triggerExpress = null; if(!StringUtils.isEmpty(instance.getServerCronExpress())){ triggerExpress = instance.getServerCronExpress(); }else{ triggerExpress = instance.getCronExpress(); } Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(instance.getIdentifier() + "Trigger", Scheduler.DEFAULT_GROUP) .forJob(jobDetail) .withSchedule(CronScheduleBuilder.cronSchedule(triggerExpress)) .build(); try { this.scheduler.scheduleJob(jobDetail, trigger); log.info("Scheduled job {} with cron {}", instanceKey, triggerExpress); } catch (SchedulerException e) { e.printStackTrace(); } }
public String cleanUpJob(String serverKey){ JobKey jobkey = new JobKey(serverKey, Scheduler.DEFAULT_GROUP); JobInstance jobGroup = this.jodInstanceDao.findByIdentifier(serverKey); if(jobGroup!= null && jobGroup.getServerKeys() != null){//组任务 for(String s : jobGroup.getServerKeys().split(",")){ JobKey jKey = new JobKey(s, Scheduler.DEFAULT_GROUP); try { if(!this.scheduler.deleteJob(jKey)){ log.warn("Delete job {} failure, maybe it's not scheduled", jKey); } } catch (SchedulerException e) { e.printStackTrace(); return "error"; } } try { if(!this.scheduler.deleteJob(jobkey)){ log.warn("Delete job {} failure, maybe it's not scheduled", jobkey); } } catch (SchedulerException e) { e.printStackTrace(); return "error"; } }else{//普通任务 try { if(!this.scheduler.deleteJob(jobkey)){ log.warn("Delete job {} failure, maybe it's not scheduled", jobkey); } } catch (SchedulerException e) { e.printStackTrace(); return "error"; } } return "success"; }
3、rule:任务规则设置
应用场景:设置任务的规则,从而让异常检测模块来根据配置的规则检测任务的超时情况以及检测问题后是否发送短信和发送短信的号码、短信级别。
功能说明:设置超时的倍数(比最近一次正常执行时间的多少倍为超时判断的标准)、设置是否发送短信、发送短信的号码、发送短信的级别。
相关推荐
定时调度任务说明
定时管理,定时调度作业,一个很好用的定时调度作业第三方软件
Quartz.net做为任务调度核心,利用Log4Net做为日志输出,C#完成WINDOWS服务在后台定时执行任务;
Spring定时调度简单实现源码.rar
Spring中集成的一个定时任务调度器,以备以后使用
java定时任务调度java定时任务调度java定时任务调度java定时任务调度java定时任务调度java定时任务调度
报表开发工具FineReport决策系统教程之【3】定时调度
quartz 2.2.1 定时调度 java 最新版jar
quartz定时调度,数据库配置执行时间,可用,挺好的,够了
JAVA定时任务调度
nodejs定时调度任务
quartz 定时任务调度支持cron表达式,mvc版本,支持插件部署
kettle定时调度监控方案选型策略 kettle定时调度监控方案选型策略
Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 ...Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。
配置定时计划,以及定时调度任务, 调度配置工具 ORM基于Dapper实现 日志采用Nlog实现 将程序打包为桌面安装程序,采用Microsoft Visual Studio 2010、2015、2017 Installer Projects实现 调度服务实现 采用Quartz...
quartz定时调度完整实例 完美调度quartz定时调度完整实例 完美调度
incubator-airflow:定时任务管理平台,管理和调度各种离线定时任务,自带 Web 管理界面。当定时任务量达到百级别的时候,就无法再使用 crontab 有效、方便地管理这些任务了。该项目就是为了解决了这个问题而诞生的
这个文件包含了xxl-job的定时调度中心源码、执行器demo源码,需要的可以下载。
最新最全定时调度器xxl_job,无改造,2018最新下载,手把手教
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。...