`
deepinmind
  • 浏览: 452244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
1dc14e59-7bdf-33ab-841a-02d087aed982
Java函数式编程
浏览量:41682
社区版块
存档分类
最新评论

使用Quartz和Obsidian来调度任务

阅读更多
在介绍使用到的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


英文原文链接

1
0
分享到:
评论

相关推荐

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    在"Quartz.net作业调度自定义定时执行任务多任务执行c#"这个主题中,我们将深入探讨如何使用Quartz.NET来实现自定义的定时任务,以及如何处理多任务执行。 首先,我们需要理解Quartz.NET的基本概念。在Quartz.NET中...

    ASP.NET使用Quartz.NET实现定时任务调度

    结合使用Quartz.NET和TopShelf,我们可以构建一个在Windows服务中运行的定时任务调度系统。 Quartz.NET的特性包括: 1. **灵活的调度**:Quartz.NET支持多种调度模式,如简单触发器、cron触发器,可以按照精确时间...

    Java使用quartz实现任务调度定时任务

    `quartz_job.sql`文件可能包含Quartz所需的数据库表结构,Quartz使用数据库来存储Job和Trigger的信息,以便在系统重启后仍能恢复之前设置的任务。你需要根据自己的数据库类型(如MySQL、Oracle等)对这个SQL脚本进行...

    quartz 定时任务调度

    总的来说,Quartz 提供了一个强大的定时任务调度平台,结合 Spring 使用,可以简化开发过程,使开发者专注于业务逻辑,而不需要关心底层的调度实现。通过配置和编程接口,我们可以灵活地定义和管理各种定时任务,...

    Java中使用Quartz实现任务自动调度的经典例子!

    Quartz是Java中一个强大的开源任务调度库,它允许开发者定义和执行短时或周期性的任务。...通过学习和实践这个例子,你将能够熟练地在Java项目中使用Quartz进行任务调度,实现复杂的工作流自动化。

    Quartz任务调度器

    在与Spring框架整合后,Quartz能更好地融入到现有的应用架构中,实现更高效的资源管理和任务调度。 首先,我们要理解Quartz的核心概念。`Job`是Quartz中的基本工作单元,它代表一个要执行的任务。而`Trigger`则定义...

    利用Quartz实现任务调度的集群

    - **监控和管理**:Quartz提供了多种工具和API用于监控和管理任务调度,包括查看任务状态、暂停或恢复任务、删除任务等。 在实际应用中,Quartz集群能够很好地处理大规模、复杂的定时任务场景,减少了自定义实现的...

    Quartz调度、终止执行的任务

    Quartz是一款开源的作业调度框架,它允许开发者创建和安排任务执行。在Java应用程序中,Quartz能够帮助我们在特定的时间点或按照预设的周期执行某些功能,如数据收集、日志清理等。当我们需要终止某个正在运行的任务...

    Quartz.Net任务调度

    Quartz.Net是一个强大的任务调度框架,它在.NET环境中被广泛应用,...这个QuartzDemo压缩包很可能是包含了一个简单的Quartz.Net应用实例,你可以解压后学习其结构和代码,以便更好地理解和使用这个强大的任务调度框架。

    任务调度开源框架Quartz

    通过阅读《任务调度框架Quartz.doc》文档,你将能够深入理解Quartz的内部机制,学习如何创建和配置作业与触发器,以及如何在实际项目中集成和使用Quartz。文档可能还会涵盖Quartz的源码分析,这对于想要定制或优化...

    基于Quartz.Net 的任务调度计划框架

    Quartz.Net是一个强大的开源任务调度框架,用于在.NET环境中创建和执行定时任务。它提供了灵活的调度机制,允许开发者在应用程序中定义复杂的作业执行规则,从而实现自动化的工作流程。Quartz.NET不仅支持简单的定时...

    .net Quartz 任务调度平台源码

    .NET Quartz 是一款强大的任务调度框架,它为.NET开发者提供了一种高效、灵活的方式来安排和执行周期性任务。Quartz.NET 是开源项目Quartz的.NET版本,它允许开发人员在应用程序中创建、管理和执行定时任务,而无需...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    1. **集群部署**:多个调度节点部署在同一集群中,通过共享数据库或Redis等分布式存储来协调任务的分配和执行,确保同一任务不会在多台机器上重复执行。 2. **集群同步**:当某个节点添加或更新任务时,会将变更...

    spring任务调度(Quartz )

    Spring中的任务调度是实现应用程序自动化运行任务的重要工具,而Quartz是Java领域广泛使用的开源任务调度框架。在本文中,我们将深入探讨如何在Spring中集成Quartz进行任务调度,并通过一个简单的示例来理解其工作...

    Spring+Quartz实现任务调度的小例子

    Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...

    quartz3种调度形式+传参.zip

    在不依赖任何框架的情况下,直接使用Quartz API进行任务调度。首先,你需要创建一个Job类,实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法。然后,定义Trigger来决定任务何时执行,...

    Quartz--JAVA定时任务\Java应用:Java调度任务和Spring Quartz (1)

    总结来说,Quartz是Java中强大的定时任务库,通过它我们可以方便地创建和管理复杂的任务调度,包括但不限于在特定时间点执行任务、按固定间隔重复执行、甚至在满足特定条件时触发任务。相比`java.util.Timer`,...

    Spring整合任务调度框架Quartz

    Spring 整合任务调度框架 Quartz ...Spring 整合任务调度框架 Quartz,可以使用配置文件方式或 Quartz 持久化方式来实现任务调度。开发者可以根据实际情况选择合适的方式,从而提高软件系统的自动化和可靠性。

    任务调度框架Quartz

    1.调度器(Scheduler):Quartz 的核心组件,负责管理和执行任务调度。调度器可以创建、执行和管理任务,包括触发器的创建、任务的执行和状态的管理。 2.任务(Job):是一个接口,只有一个方法 void execute...

Global site tag (gtag.js) - Google Analytics