quartz入门实例

原创 2012年03月31日 15:08:04

quartz是一个完全由java编写的作业调度管理的一个轻量级框架,目前在很多企业应用中被使用,类似于java类库中的TimeTask、数据库中的job等。但quartz功能更强大、更灵活。相应的jar包可以到开源网站里去下载,这里我们直接从建一个quartz_demo工程开始,做一个入门实例。(本文章没做具体叙述,详细内容请参看本人其他博文)

 

工程目录结构图:

 

一、新建一个java工程quartz_demo,引入quartz的jar包以及第三方包在quartzxxx/lib目录下。

二、创建一个job类,该job类功能为扫描某一个目录,统计该目录下xml文件的信息。

job类要实现org.quartz.Job接口,其中的execute方法就是用来执行job的业务逻辑的。

package com.gyb;

import java.io.File;
import java.io.FilenameFilter;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * @Title:     ScanDirJob.java 
 * @Package:   com.gyb 
 * @Desc:      扫描文件目录信息 
 * @Copyright: AsiaInfo-Linkage
 * @author:    gaoyb 
 * @date:      Mar 31, 2012 9:48:15 AM 
 * @Email:     gaoyb3@asiainfo-linkage.com
 */
public class ScanDirJob implements Job {

	public void execute(JobExecutionContext context)
			throws JobExecutionException {
		  
		 JobDataMap dataMap = context.getMergedJobDataMap();  
		 
		 String dirName = dataMap.getString("SCAN_DIR");
		 
		 if(dirName == null){
			 throw new JobExecutionException("Directory not configured");
		 }
		 
		 File fileDir = new File(dirName);
		 
		 if(!fileDir.exists()){
			 throw new JobExecutionException("Invalid Dir: " + dirName);
		 }
		 
		 //get only xml files
		 File [] files = fileDir.listFiles(new FilenameFilter(){
			 public boolean accept(File dir, String name) {
				  name = name.toLowerCase();
				  return name.endsWith(".xml");
		
			 }
		 });
		 
		 if(files == null || files.length <= 0){
			 System.out.println("No xml found id dir: " + dirName);
			 return;
		 }
		 
		 //the number of xml files
		 int size = files.length;
		 
		 for(int i=0; i<size; i++){
			 
			 File file = files[i];
			 File afile = file.getAbsoluteFile();
			 long fileSize = file.length();
			 String msg = afile + "--size:" +fileSize;
			 System.out.println(msg);
		 }
	}

}
   
    


 三、创建作业管理器类JobScheduler来启动作业

package com.gyb;

import java.util.Date;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

/**
 * @Title:     JobScheduler.java 
 * @Package:   com.gyb 
 * @Desc:      job 调度器 
 * @Copyright: AsiaInfo-Linkage
 * @author:    gaoyb 
 * @date:      Mar 31, 2012 10:38:33 AM 
 * @Email:     gaoyb3@asiainfo-linkage.com
 */
public class JobScheduler {

	public static void main(String args[]) throws SchedulerException{
		
		JobScheduler jobScheduler = new JobScheduler();
		jobScheduler.startScheduler();
	}
	
	public void startScheduler() throws SchedulerException{
		
		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		System.out.println("scheduler: " + scheduler);
		scheduler.start();
		System.out.println("Scheduler started at "+ new Date());
	}
}
   
    


四、配置quartz.properties,这个在框架的org.quartz下也有一个,框架默认会去classpath下加载这个文件。

这个文件主要是对scheduler、threadPool、jobStore、plugin等这几块进行配置。

这里指定了job配置的xml文件目录:

org.quartz.plugin.jobInitializer.fileNames = my_quartz_jobs.xml

可以配置多个xml文件,已逗号隔开,比如:

org.quartz.plugin.jobInitializer.fileNames = my_quartz_jobs.xml,my_quartz_jobs2.xml

 

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

#config scheduler
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

#config threadPool
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#config jobStore
org.quartz.jobStore.misfireThreshold = 600000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

#config plugin
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileNames = my_quartz_jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.validating = false
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true


五、新建配置job详细信息的xml文件my_quartz_jobs.xml,在框架中默认会去加载quartz_jobs.xml。我们可以定义自己命名的xml文件。可以定义多个。

每个xml里可以定义多个job,下面例子中配置的触发器从2012-03-31T05:55:00开始每隔3秒执行一次。

<?xml version="1.0" encoding="UTF-8"?>
<quartz>                                         
	<job>                                            
		<job-detail>                                     
			<name>ScanDirJob</name>                      
			<group>DEFAULT</group>                           
			<description>                                    
				A job that scans a directory for files           
	 		</description>                                  
	 		<job-class>                                     
	 			com.gyb.ScanDirJob
	 		</job-class>                                    
			<volatility>false</volatility>                  
			<durability>false</durability>                  
			<recover>false</recover>                        
	                                                 
			<job-data-map allows-transient-data="true">     
				<entry>                                         
					<key>SCAN_DIR</key>                             
					<value>D:\workspace\resmanm_qhai\web\WEB-INF</value>            
				</entry>                                        
			</job-data-map>                                 
 		</job-detail>                                   
                                                 
		<trigger>                                       
			<simple>                                        
				<name>scanTrigger1</name>                       
				<group>DEFAULT</group>                          
				<job-name>ScanDirJob</job-name>             
				<job-group>DEFAULT</job-group>  
				<start-time>2012-03-31T05:55:00</start-time>  
				<end-time>2012-03-31T06:00:00</end-time>               
				<!-- repeat indefinitely every 3 seconds -->   
				<repeat-count>-1</repeat-count>                 
				<repeat-interval>3000</repeat-interval>        
			</simple>                                       
		</trigger>                                      
	</job>                                   
</quartz>


六、运行JobScheduler类,效果如下:

 

 

相关文章推荐

Quartz2.2.1入门实例

  • 2015年05月15日 19:30
  • 6KB
  • 下载

quartz入门(一)下载及简单实例

下载官网下载地址:http://www.quartz-scheduler.org/ 下载步骤: 1、点击橘黄色的download连接。 2、点击Direct Download下面的Quar...

Quartz---入门级实例

使用 Quartz 实现定时功能,  Quartz 是一个完全由 java 编写的开源作业调度框架。 Quartz的几个核心的接口和类为:      Job 接口: 自己写的 “ 定时程序...

CronTrigger表达式和Quartz使用实例入门

CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,如每月8日发工资的定时任务。 CronTrigger,你可...

Quartz入门实例9-实现Trigger监听器

Trigger监听器 和 job监听器 的实现 

Quartz入门实例6-处理job异常

当Job在执行是可能会出现异常操作,

quartz入门(二)SimpleTrigger简单实例

此篇博客为quartz2.2.1第二个例子的解析,此例子主要对SimpleTrigger的使用进行详细说明,详细使用说明均在代码中以注释的形式体现。 SimpleTrigger:在某个时刻开始,然后按...

Quartz入门实例7-处理被中断的Job

让Job实现  InterruptableJob就可以

Quartz入门实例3-使用CronTrigger指定触发器执行job

 SimpleTrigger 对于需要在指定的毫秒处及时执行的作业还是不错的,但是假如你的作业需要更复杂的执行计划时,你也就要 CronTrigger 给你提供更强更灵活的功能。 cron ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:quartz入门实例
举报原因:
原因补充:

(最多只允许输入30个字)