在介绍使用到的Quartz和Obsidian的API之前,首先我得声明一下,一般来说使用API并不是调度任务的最佳方式。Quartz提供了一个通过XML来配置作业的机制,而Obsidian则为你提供了一套完整的管理和监控的WEB应用。
然而,有一些使用场景还是强烈推荐使用API的,我们来看一下吧。
Quartz
我们先来看下在Quartz里每半小时调度一次任务是怎样实现的:
// First, create the scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();
// Build up the job detail
JobDetail job = JobBuilder.newJob(HelloWorld.class)
.withIdentity("HelloWorldJob", "HelloWorldGroup")
.build();
// Add some configuration
job.getJobDataMap().put("planet", "Earth");
// Create the scheduler
CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("* 0/30 * * * ?");
// Create the trigger
CronTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("HelloWorldTrigger", "HelloWorldGroup")
.withSchedule(schedule)
.build();
// Schedule the job with the created trigger.
scheduler.scheduleJob(job, trigger);
scheduler.start(); // This is how you start the scheduler itself if you need to
// Later, we can shut down the scheduler
scheduler.shutdown();
可以看到,首先你得获取到一个调度器实例的句柄,然后创建JobDetail,CronScheduleBuilder,以及CronTrigger,最后你才能去调度任务。
这里有几步看起来有点多余,还有那些无关的属性比如说作业标识符,触发器名字,触发器组,等等,但这是你使用的一个基本的模板所必须的。
Obsidian
我们来看下Obsidian 是怎么做的。我们使用的是同一个Job类(假设它同时满足Quartz和Obsidian的要求),用的也是同样的半小时一次的策略。
// Create our configuration parameters
List<ConfigurationParameter> parameters = Arrays.asList(
new ConfigurationParameter().withName("planet")
.withType(ParameterType.STRING)
.withValue("Earth")
);
// Set up the job configuration
JobCreationRequest request = new JobCreationRequest()
.withNickname("HelloWorld")
.withJobClass(HelloWorld.class.getName())
.withState(JobStatus.ENABLED)
.withSchedule("* 0/30 * * *")
.withRecoveryType(JobRecoveryType.LAST) // how to recover failed jobs
.withParameters(parameters);
// Now actually save this configurations, which becomes active on all schedulers.
JobDetail addedJob = new JobManager().addJob(request, "Audit User");
System.out.println("Added new job: " + addedJob );
// If you need to start an embedded scheduler, use this line to initialize it.
SchedulerStarter scheduler = SchedulerStarter.get(SchedulerMode.EMBEDDED);
// Later, we can gracefully shut down the scheduler
scheduler.shutDown();
可以看到的是,Obsidian非常简单,它废弃了那些对你开发和管理任务没有帮助的无关属性。你只需要创建一个JobCreationRequest,带上需要的几个字段,包括ConfigurationParameters什么 的,然后调用 JobManager.addJob(),把作业属性和可选的一个审核用户传进去就好了,这个用户是用来跟踪任务的修改的。
调用这个接口会把你的配置存储到Obsidian的数据库中,因此它会广播到你集群中的所有调度器中。很多用户都体会到了它的便利性,他们只需执行一次作业调度的初始化配置,就可以通过这个功能强大的WEB应用来对它们进行修改了。
这个API是经过仔细设计的,它提供的特性都是用户所需的,不仅功能强大同时还易于使用。这个示例是一个使用Obsidian的简单的模板,如果你想深入了解一下或者需要用到别的一些扩展的特性的话,可以参考下我们
完整的API文档。
原创文章转载请注明出处:
http://it.deepinmind.com
英文原文链接
分享到:
相关推荐
在"Quartz.net作业调度自定义定时执行任务多任务执行c#"这个主题中,我们将深入探讨如何使用Quartz.NET来实现自定义的定时任务,以及如何处理多任务执行。 首先,我们需要理解Quartz.NET的基本概念。在Quartz.NET中...
总的来说,使用ASP.NET、Quartz.NET和TopShelf的组合,开发者可以构建出一个高效、稳定且易于维护的任务调度系统,对于需要后台自动化处理的工作场景,这是一种非常实用的解决方案。在实际应用中,可以根据具体需求...
`quartz_job.sql`文件可能包含Quartz所需的数据库表结构,Quartz使用数据库来存储Job和Trigger的信息,以便在系统重启后仍能恢复之前设置的任务。你需要根据自己的数据库类型(如MySQL、Oracle等)对这个SQL脚本进行...
总的来说,Quartz 提供了一个强大的定时任务调度平台,结合 Spring 使用,可以简化开发过程,使开发者专注于业务逻辑,而不需要关心底层的调度实现。通过配置和编程接口,我们可以灵活地定义和管理各种定时任务,...
Quartz是Java中一个强大的开源任务调度库,它允许开发者定义和执行短时或周期性的任务。...通过学习和实践这个例子,你将能够熟练地在Java项目中使用Quartz进行任务调度,实现复杂的工作流自动化。
在与Spring框架整合后,Quartz能更好地融入到现有的应用架构中,实现更高效的资源管理和任务调度。 首先,我们要理解Quartz的核心概念。`Job`是Quartz中的基本工作单元,它代表一个要执行的任务。而`Trigger`则定义...
- **监控和管理**:Quartz提供了多种工具和API用于监控和管理任务调度,包括查看任务状态、暂停或恢复任务、删除任务等。 在实际应用中,Quartz集群能够很好地处理大规模、复杂的定时任务场景,减少了自定义实现的...
Quartz是一款开源的作业调度框架,它允许开发者创建和安排任务执行。在Java应用程序中,Quartz能够帮助我们在特定的时间点或按照预设的周期执行某些功能,如数据收集、日志清理等。当我们需要终止某个正在运行的任务...
Quartz.Net是一个强大的任务调度框架,它在.NET环境中被广泛应用,...这个QuartzDemo压缩包很可能是包含了一个简单的Quartz.Net应用实例,你可以解压后学习其结构和代码,以便更好地理解和使用这个强大的任务调度框架。
通过阅读《任务调度框架Quartz.doc》文档,你将能够深入理解Quartz的内部机制,学习如何创建和配置作业与触发器,以及如何在实际项目中集成和使用Quartz。文档可能还会涵盖Quartz的源码分析,这对于想要定制或优化...
Quartz.Net是一个强大的开源任务调度框架,用于在.NET环境中创建和执行定时任务。它提供了灵活的调度机制,允许开发者在应用程序中定义复杂的作业执行规则,从而实现自动化的工作流程。Quartz.NET不仅支持简单的定时...
.NET Quartz 是一款强大的任务调度框架,它为.NET开发者提供了一种高效、灵活的方式来安排和执行周期性任务。Quartz.NET 是开源项目Quartz的.NET版本,它允许开发人员在应用程序中创建、管理和执行定时任务,而无需...
1. **集群部署**:多个调度节点部署在同一集群中,通过共享数据库或Redis等分布式存储来协调任务的分配和执行,确保同一任务不会在多台机器上重复执行。 2. **集群同步**:当某个节点添加或更新任务时,会将变更...
Spring中的任务调度是实现应用程序自动化运行任务的重要工具,而Quartz是Java领域广泛使用的开源任务调度框架。在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作...
Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...
在不依赖任何框架的情况下,直接使用Quartz API进行任务调度。首先,你需要创建一个Job类,实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法。然后,定义Trigger来决定任务何时执行,...
总结来说,Quartz是Java中强大的定时任务库,通过它我们可以方便地创建和管理复杂的任务调度,包括但不限于在特定时间点执行任务、按固定间隔重复执行、甚至在满足特定条件时触发任务。相比`java.util.Timer`,...
Spring 整合任务调度框架 Quartz ...Spring 整合任务调度框架 Quartz,可以使用配置文件方式或 Quartz 持久化方式来实现任务调度。开发者可以根据实际情况选择合适的方式,从而提高软件系统的自动化和可靠性。
1.调度器(Scheduler):Quartz 的核心组件,负责管理和执行任务调度。调度器可以创建、执行和管理任务,包括触发器的创建、任务的执行和状态的管理。 2.任务(Job):是一个接口,只有一个方法 void execute...