Quartz框架入门教程:创建Job与execute方法解析

需积分: 10 7 下载量 133 浏览量 更新于2024-07-30 收藏 285KB DOC 举报
"Quartz框架快速入门" Quartz框架是一个开源的作业调度库,它提供了强大的任务调度能力,能够按照预定义的时间表执行Java任务。在快速入门Quartz框架的过程中,首先需要下载Quartz的二进制版本,例如quartz-<version>.jar,并根据实际需求引入相关依赖库,如CommonsDigester库。如果遇到`java.lang.NoClassDefFoundError: javax/transaction/UserTransaction`的错误,可以通过引入jta.jar包来解决。 创建一个Quartz Job类是使用Quartz的关键步骤。每个Quartz Job都需要实现`org.quartz.Job`接口,该接口定义了一个`execute()`方法。当Quartz调度器触发Job执行时,它会实例化Job类并调用其`execute()`方法。这个方法不关心执行结果,除非发生`JobExecutionException`异常。 以下是一个简单的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.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; public class FileScannerJob implements Job { private static final Log log = LogFactory.getLog(FileScannerJob.class); public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap jobDataMap = context.getMergedJobDataMap(); String directoryPath = jobDataMap.getString("directoryPath"); File directory = new File(directoryPath); FileFilter fileFilter = new FileFilter() { @Override public boolean accept(File file) { return true; // 根据需要定制过滤条件 } }; for (File file : directory.listFiles(fileFilter)) { log.info("File found: " + file.getName() + " - Last Modified: " + new Date(file.lastModified())); } } public static void main(String[] args) throws Exception { JobDetail jobDetail = JobBuilder.newJob(FileScannerJob.class) .withIdentity("fileScannerJob", "group1").build(); Trigger trigger = TriggerBuilder.newTrigger().withIdentity("fileScannerTrigger", "group1") .startNow().build(); SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); scheduler.scheduleJob(jobDetail, trigger); } } ``` 在这个例子中,`FileScannerJob`实现了`Job`接口,并在`execute()`方法中实现了扫描文件的功能。`main()`方法用于配置和启动这个Job,它创建了JobDetail对象,定义了Job的标识和分组,然后创建了Trigger来指定Job的执行时间。最后,通过SchedulerFactory获取Scheduler实例,启动Scheduler并安排Job的执行。 为了更全面地使用Quartz,还需要了解如何配置Scheduler、JobStore(用于存储Job和Trigger信息)、以及触发策略,如CRON表达式或SimpleTrigger。此外,可以利用JobDataMap传递参数到Job,以实现灵活的任务配置。在实际应用中,可能还需要考虑并发执行、Job状态管理、错误处理等高级特性。Quartz提供了一个强大且可扩展的平台,能够满足复杂的企业级定时任务调度需求。
2024-10-20 上传