`

Quartz使用

 
阅读更多

 

官网: 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使用实例

    以下是对Spring整合Quartz使用实例的详细说明: 1. **Quartz简介** Quartz是一个强大的、完全开源的作业调度框架,它支持复杂的调度策略,如按日期、时间间隔或自定义表达式执行。Quartz可以在Java应用中作为独立...

    定时器Quartz使用说明

    ### Quartz 使用说明详解 #### 一、Quartz 功能简介 **Quartz** 是一款开源的任务调度框架,广泛应用于 Java 应用程序中。它的主要功能是帮助开发者以灵活的方式调度任务,支持复杂的触发规则。 - **嵌入式运行**...

    quartz使用例子

    ### Quartz使用例子详解 在Java领域,Quartz是一个强大的任务调度框架,被广泛应用于各种应用场景中,例如定时任务、事件处理等。本文将基于提供的代码片段,深入解析Quartz的使用方法,包括如何定义Job、配置...

    Quartz使用详解

    Quartz 使用详解 Quartz 是一个功能强大的作业调度器,可以帮助开发者实现复杂的任务调度和执行。下面是关于 Quartz 使用详解的知识点总结。 一、实例化 Scheduler 在使用 Quartz 之前, 必须使用 ...

    Quartz使用总结

    ### Quartz使用总结与详解 #### 一、Quartz概述 Quartz是一个开源的任务调度框架,主要功能在于能够根据用户自定义的时间规则来触发任务执行。Quartz提供了丰富的接口供开发者进行二次开发,使得任务调度变得非常...

    quartz使用实例

    - 默认情况下,Quartz使用内存存储作业和触发器信息,但也可以配置使用数据库进行持久化,确保服务器重启后任务不会丢失。 9. **高级特性** - `Stateful Jobs`:有状态的作业,每个实例只执行一次,适合处理不可...

    quartz使用指南

    quartz使用指南,quartz使用指南,quartz使用指南

    Quartz使用小结

    这个小结将深入探讨Quartz的核心概念、使用场景以及如何与Spring框架集成。 一、Quartz简介 Quartz是由Caledonia Software公司开发的Java定时任务库,它提供了一种高度可配置的方式来安排和执行工作。Quartz支持...

    spring+quartz使用jar包

    Spring 和 Quartz 是两个在 Java 开发中非常重要的框架。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC...正确配置和使用这两个框架,能够为企业的后台服务带来极大的灵活性和可维护性。

    spring整合quartz使用jdbc存储

    Quartz本身支持多种持久化策略,包括使用数据库(JDBC)来存储作业和触发器信息,这使得任务调度信息在系统重启后仍能保留。下面将详细介绍如何进行Spring与Quartz的整合,以及使用JDBC存储的相关步骤。 1. **...

    Quartz使用实例

    这个"Quartz使用实例"可能包含一个演示了如何配置和使用Quartz的项目,解压后可以直接运行,这对于初学者或者需要快速理解Quartz工作原理的人来说非常有用。 Quartz的核心概念包括Job(作业)、Trigger(触发器)和...

    quartz使用cron表达式的实例

    本文将深入探讨如何使用Quartz配合cron表达式来实现定时任务的实例。 首先,我们要理解cron表达式。Cron表达式是Unix系统中的定时任务调度工具,也被Quartz框架所采用。它由六个或七个子表达式组成,每个子表达式...

    QuartZ使用1

    Quartz 使用简单、灵活的 API 来创建、管理和执行作业。在本文中,我们将深入探讨如何在 .NET 应用程序中使用 Quartz.NET,这是一个专门为 .NET 平台实现的 Quartz 版本。 首先,要开始使用 Quartz.NET,你需要将 ...

    idea 使用spring自带的定时器quartz 使用的c3p0 v0.95.2所包含的jar

    接下来,为了使用`Quartz`,你需要引入`quartz-spring`库,并配置`Scheduler`: ```xml <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- 其他配置...

    Quartz 线程池

    Quartz 是一个开源的作业调度框架,它允许开发者在 Java 应用程序中安排任务的执行。线程池是 Quartz 的核心组成部分,用于管理和执行触发的任务。本文将深入探讨 Quartz 线程池的工作原理、配置以及如何在实际项目...

    关于spring中quartz的配置

    如果使用的是Spring Boot,可以在`application.properties`或`application.yml`中配置Quartz,并通过`@EnableScheduling`注解启用定时任务支持。 8. **动态管理定时任务** Spring提供的`SchedulerFactoryBean`...

    Quartz使用指南

    8. **集成环境**:Quartz 可以在多种环境中使用,既可以作为独立应用程序,也可以作为 J2EE 应用服务器的组件。它还支持 RMI(远程方法调用)接口,便于远程管理和监控。 9. **灵活性**:Quartz 的灵活性体现在其...

    JAVA定时调度框架-Quartz使用入门到精通.doc

    Quartz 是一个强大的开源作业调度框架,专为 Java 平台设计,无论是 J2SE 还是 J2EE 应用都可以使用。它的主要目的是提供一个简单易用但功能丰富的任务调度解决方案。Quartz 具备数据库支持、集群功能、插件机制、...

    springboot整合quartz定时任务yml文件配置方式

    以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及涉及的Spring Cloud Alibaba、Dubbo和Nacos的相关知识。 首先,我们需要在`pom.xml`中引入相关的依赖。Spring Boot的`spring-boot-...

Global site tag (gtag.js) - Google Analytics