`
GentlemanQc2014
  • 浏览: 1128 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

定时调度平台

阅读更多

 

 模块一: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:任务规则设置

应用场景:设置任务的规则,从而让异常检测模块来根据配置的规则检测任务的超时情况以及检测问题后是否发送短信和发送短信的号码、短信级别。

功能说明:设置超时的倍数(比最近一次正常执行时间的多少倍为超时判断的标准)、设置是否发送短信、发送短信的号码、发送短信的级别。

 
分享到:
评论

相关推荐

    C#定时调度任务服务

    《C#定时调度任务服务构建详解》 在IT行业中,定时调度任务服务是不可或缺的一部分,它使得系统能够按预设的时间间隔自动执行某些任务,提高了工作效率并降低了人为操作的复杂性。本文将深入探讨如何利用C#语言,...

    定时调度任务说明

    定时调度任务说明

    报表开发工具FineReport决策系统教程之【3】定时调度

    ### 报表开发工具FineReport决策系统教程之【3】定时调度 #### 一、表达式设定 在报表开发工具FineReport中,定时调度是一项重要的功能,它可以帮助用户按照预定的时间周期自动执行某些任务,例如生成报表、发送...

    Spring定时调度简单实现源码

    这个"Spring定时调度简单实现源码"很显然是一个关于如何在Spring中配置和使用定时任务的示例代码包。下面我们将深入探讨Spring的定时调度机制以及其核心组件。 Spring的定时任务调度主要依赖于两个关键组件:`Task...

    数据库配置定时调度

    在IT领域,数据库配置定时调度是一项关键任务,用于自动化执行一系列计划的任务,如数据备份、报表生成、系统维护等。Quartz是一个广泛使用的开源作业调度框架,它允许开发者精确地控制任务的执行时间。本篇文章将...

    定时调度作业 定时管理 自动化

    在IT行业中,定时调度作业是自动化流程中的关键组成部分,它允许系统按照预设的时间间隔执行特定的任务,无需人工干预。这种技术广泛应用于各种场景,如数据备份、日志清理、报表生成、服务监控等。本篇文章将深入...

    quartz 2.2.1 定时调度 java

    quartz 2.2.1 定时调度 java 最新版jar

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    定时调度器 xxl-job

    xxl-job是一款基于Java实现的分布式任务调度平台,它提供了简单易用的API和管理界面,使得开发者能够轻松地实现任务的定时调度。在这个压缩包中,你将找到xxl-job的核心组件——xxl-job-admin以及一个执行器的示例...

    java定时任务调度

    Java定时任务调度是Java开发中常见的一种功能,用于在特定时间执行特定的任务,例如数据同步、日志清理、报表生成等。在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring...

    kettle定时调度监控方案选型策略

    在本文中,我们将详细探讨Kettle定时调度监控的选型策略,以及实现这些策略时需要考虑的关键因素。 首先,对于Kettle作业的调度监控方式,有三种主流方法:使用Kettle自带的Spoon工具、通过命令行工具pan和kitchen...

    Windows服务定时调度结合

    Topshelf是创建Windows服务的另一种方法,老外的一篇文章Create a .NET Windows Service in 5 ...Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,只需要几行代码就可以构建一个很方便使用的服务宿主。

    配置定时计划,以及定时调度任务

    配置定时计划,以及定时调度任务, 调度配置工具 ORM基于Dapper实现 日志采用Nlog实现 将程序打包为桌面安装程序,采用Microsoft Visual Studio 2010、2015、2017 Installer Projects实现 调度服务实现 采用Quartz...

    Node.js-nodejs定时调度任务

    在Node.js环境中,定时调度任务是一项非常重要的功能,它允许我们按照预定的时间间隔执行特定的任务,比如发送邮件、数据备份、统计分析等。在描述中提到的"nodejs定时调度任务",通常指的是利用Node.js的库或者内建...

    定时调度器xxl_job完整代码

    XXL-JOB 是一个轻量级分布式任务调度平台,由XXL团队于2015年开源。它具有易用、稳定、高效、灵活等特点,广泛应用于互联网行业的各种业务场景,如数据同步、报表计算、日志分析等。XXL-JOB 主要由两部分组成:调度...

    Python-incubatorairflow定时任务管理平台管理和调度各种离线定时任务自带Web管理界面

    incubator-airflow:定时任务管理平台,管理和调度各种离线定时任务,自带 Web 管理界面。当定时任务量达到百级别的时候,就无法再使用 crontab 有效、方便地管理这些任务了。该项目就是为了解决了这个问题而诞生的

    Spring的定时调度--Quartz

    在IT行业中,Spring框架是Java领域最常用的轻量级应用框架之一,而Spring的定时调度功能则为企业级应用提供了强大的任务调度能力。本篇将详细探讨Spring如何集成Quartz库来实现定时任务,以及Quartz的基本概念、核心...

    监听器定时调度实例(很容易学会)

    在IT行业中,定时调度任务是常见的需求,尤其在服务器端应用程序中,用于执行定期维护、数据同步、报表生成等操作。本教程将介绍如何利用监听...记得在CSDN等平台学习更多相关知识,以加深对Java定时调度的理解和应用。

    c#任务定时调度系统,无缝对接已有系统

    一、源码描述 通过web端管理任务,操作自动传至任务中心自动执行(支持启动、停止、删除操作),任务支持立即执行,指定时间段执行,支持二次开发,也可对接外部webapi实现和已有系统无缝对接,系统内置Cron表达式...

    spring的定时调度

    在IT行业中,Spring框架是Java领域的一个重要组成部分,它提供了丰富的功能,其中之一就是定时调度。Spring的定时调度功能使得开发者能够方便地实现周期性任务,无需深入理解底层复杂的定时器机制。下面,我们将深入...

Global site tag (gtag.js) - Google Analytics