使用Spring 3进行动态作业调度

时间:2012-08-28 15:52:19

标签: java spring java-ee spring-mvc scheduled-tasks

我开发了一个网络抓取工具,它使用起始网址作为种子参数进行抓取。我希望允许用户根据作业安排此任务。

目前我正在使用Spring 3.1.2Hibernate。我需要给用户一个接收cronJob参数的前端,并根据我想要运行爬虫。是否可以使用弹簧来做到这一点。

我读了一些关于Quartz的内容,但SO或其他网站上的文章并不完全清楚,或者它们不完整,以便完全了解如何在春季实施调度程序。

我知道有三个组成部分的基础知识

  1. SchedulerFacotry
  2. 触发
  3. 工作(服务运行)
  4. 我希望有人可以指导我正确的方向。

1 个答案:

答案 0 :(得分:9)

Quartz调度程序是这项工作的正确工具。出于某种原因,几乎所有教程都专注于在启动时使用XML定义作业 - 而Quartz完全能够在运行时调度(re- | un - )作业。

你可以而且应该利用Spring来启动Quartz Scheduler,但是你可以直接从你的代码中与它进行交互。这是一个简单的示例from the documentation

JobDetail job = newJob(SimpleJob.class)
    .withIdentity("job1", "group1")
    .build();

CronTrigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .withSchedule(cronSchedule("0/20 * * * * ?"))
    .build();

scheduler.scheduleJob(job, trigger);

在这里定义作业(要运行的Java代码片段),触发器(何时运行它,用户可以提供任何有效的CRON表达式)并将其全部包装通过安排它。 Spring可以注入 scheduler 实例。 Spring也将处理正确的关闭。