官网: http://quartz-scheduler.org/downloads/catalog?activated=true
Quartz核心的概念:scheduler任务调度、Job任务、Trigger触发器、JobDetail任务细节
1 创建一个实现接口Job的类,其中的方法execute是每个任务需要执行的事情
2 创建 Scheduler
3 创建 JobDetail,这个类要注册 1)Job名称 2)Job 组别 3) 实现了Job接口的类
4 创建 Trigger,这个Trigger有两种 1)简单Trigger 2) 基于日历级别的CronTrigger
CronTrigger 中表达式的使用: http://username2.iteye.com/admin/blogs/1825347
5 在Scheeduler中注册 JobDetail和Trigger
代码:
1 Job接口的实现类
package Quartz; 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; /** * @author root */ public class ScanDirectoryJob implements Job{ //记录日志 static Log logger = LogFactory.getLog( ScanDirectoryJob.class); @Override public void execute(JobExecutionContext context) throws JobExecutionException { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } logger.info( "Thread ==="+Thread.currentThread() ); //Every job has its own job detail JobDetail jobDetail = context.getJobDetail(); // 名字被定义在job定义的时候 String jobName = jobDetail.getName(); logger.info(jobName+" fired at "+new Date()); JobDataMap dataMap = jobDetail.getJobDataMap(); String dirName = dataMap.getString("SCAN_DIR"); logger.info("dirname === "+dirName); } }
2 Cron trigger 例子
package Quartz; import org.quartz.CronExpression; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.impl.StdSchedulerFactory; /** * 使用 Cron trigger * @author root * */ public class CronQuartz { public static void main(String[] args) { CronQuartz cq = new CronQuartz(); try { cq.task(); } catch ( Exception e) { e.printStackTrace(); } } public void task() throws Exception { // Initiate a Schedule Factory SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // Retrieve a scheduler from schedule factory Scheduler scheduler = schedulerFactory.getScheduler(); // Initiate JobDetail with job name, job group, and executable job class JobDetail jobDetail = new JobDetail("jobDetail2", "jobDetailGroup2", ScanDirectoryJob.class ); // Configure the directory to scan jobDetail.getJobDataMap().put("SCAN_DIR", "tempDir"); // Initiate CronTrigger with its name and group name CronTrigger cronTrigger = new CronTrigger("cronTrigger", "triggerGroup2"); // setup CronExpression CronExpression cexp = new CronExpression("0/5 * * * * ?"); // Assign the CronExpression to CronTrigger cronTrigger.setCronExpression(cexp); // schedule a job with JobDetail and Trigger scheduler.scheduleJob(jobDetail, cronTrigger); // start the scheduler scheduler.start(); } }
3 简单Trigger,通常不用
package Quartz; import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; //编程式任务处理 /** * * 使用 simple trigger * http://liuzidong.iteye.com/blog/1121683 * @author root *1 创建 Scheduler *2 创建 JobDetail,这个类要注册 1)Job名称 2)Job 组别 3) 实现了Job接口的类 *3 创建 Trigger *4 在Scheeduler中注册 JobDetail和Trigger */ public class SimpleScheduler { static Log logger = LogFactory.getLog( SimpleScheduler.class); public static void main(String[] args) throws SchedulerException { SimpleScheduler simple = new SimpleScheduler(); Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); scheduler.start(); logger.info(" Scheduler started at "+new Date()); // Schedule the first Job simple.scheduleJob(scheduler, "ScanDirectory1",ScanDirectoryJob.class,"D:\\conf1", 10); // Schedule the second Job simple.scheduleJob(scheduler, "ScanDirectory2",ScanDirectoryJob.class,"D:\\conf2 ", 15); } private void scheduleJob(Scheduler scheduler, String jobName,Class jobClass, String scanDir, int scanInterval) throws SchedulerException { // Create a JobDetail for the Job JobDetail jobDetail = new JobDetail(jobName,Scheduler.DEFAULT_GROUP, jobClass); // Configure the directory to scan jobDetail.getJobDataMap().put("SCAN_DIR", scanDir); // Trigger that repeats every "scanInterval" secs forever Trigger trigger = TriggerUtils.makeSecondlyTrigger(scanInterval); trigger.setName(jobName + "-Trigger"); // Start the trigger firing from now trigger.setStartTime(new Date()); // Associate the trigger with the job in the scheduler scheduler.scheduleJob(jobDetail, trigger); } }
相关推荐
以下是对Spring整合Quartz使用实例的详细说明: 1. **Quartz简介** Quartz是一个强大的、完全开源的作业调度框架,它支持复杂的调度策略,如按日期、时间间隔或自定义表达式执行。Quartz可以在Java应用中作为独立...
### Quartz 使用说明详解 #### 一、Quartz 功能简介 **Quartz** 是一款开源的任务调度框架,广泛应用于 Java 应用程序中。它的主要功能是帮助开发者以灵活的方式调度任务,支持复杂的触发规则。 - **嵌入式运行**...
### Quartz使用例子详解 在Java领域,Quartz是一个强大的任务调度框架,被广泛应用于各种应用场景中,例如定时任务、事件处理等。本文将基于提供的代码片段,深入解析Quartz的使用方法,包括如何定义Job、配置...
Quartz 使用详解 Quartz 是一个功能强大的作业调度器,可以帮助开发者实现复杂的任务调度和执行。下面是关于 Quartz 使用详解的知识点总结。 一、实例化 Scheduler 在使用 Quartz 之前, 必须使用 ...
### Quartz使用总结与详解 #### 一、Quartz概述 Quartz是一个开源的任务调度框架,主要功能在于能够根据用户自定义的时间规则来触发任务执行。Quartz提供了丰富的接口供开发者进行二次开发,使得任务调度变得非常...
- 默认情况下,Quartz使用内存存储作业和触发器信息,但也可以配置使用数据库进行持久化,确保服务器重启后任务不会丢失。 9. **高级特性** - `Stateful Jobs`:有状态的作业,每个实例只执行一次,适合处理不可...
quartz使用指南,quartz使用指南,quartz使用指南
这个小结将深入探讨Quartz的核心概念、使用场景以及如何与Spring框架集成。 一、Quartz简介 Quartz是由Caledonia Software公司开发的Java定时任务库,它提供了一种高度可配置的方式来安排和执行工作。Quartz支持...
Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC...正确配置和使用这两个框架,能够为企业的后台服务带来极大的灵活性和可维护性。
Quartz本身支持多种持久化策略,包括使用数据库(JDBC)来存储作业和触发器信息,这使得任务调度信息在系统重启后仍能保留。下面将详细介绍如何进行Spring与Quartz的整合,以及使用JDBC存储的相关步骤。 1. **...
这个"Quartz使用实例"可能包含一个演示了如何配置和使用Quartz的项目,解压后可以直接运行,这对于初学者或者需要快速理解Quartz工作原理的人来说非常有用。 Quartz的核心概念包括Job(作业)、Trigger(触发器)和...
本文将深入探讨如何使用Quartz配合cron表达式来实现定时任务的实例。 首先,我们要理解cron表达式。Cron表达式是Unix系统中的定时任务调度工具,也被Quartz框架所采用。它由六个或七个子表达式组成,每个子表达式...
Quartz 使用简单、灵活的 API 来创建、管理和执行作业。在本文中,我们将深入探讨如何在 .NET 应用程序中使用 Quartz.NET,这是一个专门为 .NET 平台实现的 Quartz 版本。 首先,要开始使用 Quartz.NET,你需要将 ...
接下来,为了使用`Quartz`,你需要引入`quartz-spring`库,并配置`Scheduler`: ```xml <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 其他配置...
Quartz 是一个开源的作业调度框架,它允许开发者在 Java 应用程序中安排任务的执行。线程池是 Quartz 的核心组成部分,用于管理和执行触发的任务。本文将深入探讨 Quartz 线程池的工作原理、配置以及如何在实际项目...
如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...
8. **集成环境**:Quartz 可以在多种环境中使用,既可以作为独立应用程序,也可以作为 J2EE 应用服务器的组件。它还支持 RMI(远程方法调用)接口,便于远程管理和监控。 9. **灵活性**:Quartz 的灵活性体现在其...
Quartz 是一个强大的开源作业调度框架,专为 Java 平台设计,无论是 J2SE 还是 J2EE 应用都可以使用。它的主要目的是提供一个简单易用但功能丰富的任务调度解决方案。Quartz 具备数据库支持、集群功能、插件机制、...
以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及涉及的Spring Cloud Alibaba、Dubbo和Nacos的相关知识。 首先,我们需要在`pom.xml`中引入相关的依赖。Spring Boot的`spring-boot-...