关闭

quartz入门实例

1298人阅读 评论(0) 收藏 举报

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类,效果如下:

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:210433次
    • 积分:3273
    • 等级:
    • 排名:第10320名
    • 原创:117篇
    • 转载:40篇
    • 译文:0篇
    • 评论:25条