Quartz框架入门教程:创建第一个Job

4星 · 超过85%的资源 需积分: 9 4 下载量 25 浏览量 更新于2024-07-28 收藏 228KB DOC 举报
"Quartz框架快速入门教程" Quartz框架是一个开源的作业调度库,用于在Java应用程序中安排任务。这个框架允许开发者精确地控制任务的执行时间,以及创建复杂的调度模型。以下是对Quartz框架快速入门的详细说明: 1. 引入Quartz库 首先,你需要下载Quartz的对应版本的JAR包,例如`quartz-<version>.jar`。此外,根据你的需求,可能还需要其他依赖库,如`Commons Digester`,这些库通常位于`<QUARTZ_HOME>/lib/core`和`<QUARTZ_HOME>/lib/optional`目录下。如果遇到`java.lang.NoClassDefFoundError: javax/transaction/UserTransaction`错误,需要引入`jta.jar`,该包在`quartz-1.6.0/lib/build`下。 2. 创建Quartz Job类 每个要在Quartz中执行的任务都需要一个实现`org.quartz.Job`接口的Java类。这个接口只有一个方法需要实现,即`execute()`方法。`execute()`方法没有返回值,但可能会抛出`JobExecutionException`异常。当调度器决定执行任务时,它会实例化Job类并调用`execute()`方法。 例如,下面是一个简单的Quartz Job类,它的任务是扫描指定目录中的文件并显示文件的详细信息: ```java package com.vista.quartz; import java.io.File; import java.io.FileFilter; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class FileScannerJob implements Job { private static final Log log = LogFactory.getLog(FileScannerJob.class); @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getJobDetail().getJobDataMap(); String directoryPath = jobDataMap.getString("directoryPath"); File directory = new File(directoryPath); FileFilter fileFilter = (File f) -> f.isFile(); for (File file : directory.listFiles(fileFilter)) { log.info("File found: " + file.getName() + ", Last Modified: " + new Date(file.lastModified())); } } } ``` 这个类中,`execute()`方法从`JobExecutionContext`中获取配置的目录路径,并使用`FileFilter`遍历目录中的文件,打印文件名和最后修改日期。 3. 配置和调度Job 要让Quartz执行这个Job,你需要创建一个`JobDetail`对象来描述Job,然后创建一个`Trigger`对象来决定何时触发Job。`JobDetail`包含了Job类的信息,而`Trigger`指定了执行的时间和频率。接着,你需要将JobDetail和Trigger添加到Scheduler中,如下所示: ```java Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); JobDetail job = JobBuilder.newJob(FileScannerJob.class) .withIdentity("fileScanner", "group1") .usingJobData("directoryPath", "/path/to/directory") .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("fileScannerTrigger", "group1") .startNow() .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) // 每10秒执行一次 .repeatForever()) .build(); scheduler.scheduleJob(job, trigger); scheduler.start(); ``` 在这个例子中,JobDetail设置了Job的名称和组("fileScanner", "group1"),并将目录路径作为Job数据传入。Trigger设置为立即开始,并每10秒重复一次,直到被明确停止。 4. 运行和管理Scheduler 最后,启动Scheduler (`scheduler.start()`) 后,Job将在指定的时间间隔内执行。你可以通过调用`scheduler.shutdown()`来停止Scheduler,从而结束Job的执行。 通过以上步骤,你已经成功入门了Quartz框架,能够创建和调度自己的Job。在实际应用中,可以根据需要调整Trigger策略,实现更复杂的时间调度,例如按日期、时间、周期或事件触发Job执行。此外,Quartz还支持集群和分布式调度,能适应大型、高可用性的系统需求。