Quartz在JBOSS AS7中配置与使用

因项目需要,需要在Web App中定期执行某Java程序。在Google上搜索发现了Quartz。

  1. 创建一个Job

    第一步需要创建一个Job实现org.quartz.Job接口的execute方法。每次scheduler到点调用的就是这个程序。

package com.enix.dataxfer.scheduler;

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

import com.enix.dataxfer.jython.Transfer;

@DisallowConcurrentExecution
public class TransferJob implements Job{
	
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {		
		System.out.println("Transfer job is started...");
		Transfer.batch();
		System.out.println("Transfer job is ended...");
	}
}


2. 创建配置文件quartz.properties

   配置文件quartz.properties需要放在WEB-INF/classes下,此处需要注意的是,

   org.quartz.plugin.joinInitializer.fileName 指定步骤一创建的job的cron trigger信息,也就是说该Job多久运行一次。  

   jobs.xml也需要放在WEB-INF/classes文件夹下。

org.quartz.scheduler.instanceName = MyScheduler 
org.quartz.threadPool.threadCount = 1 
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin 
org.quartz.plugin.jobInitializer.fileNames = jobs.xml 
org.quartz.plugin.jobInitializer.failOnFileNotFound = true 
org.quartz.plugin.jobInitializer.scanInterval = 10 
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false


3. 创建jobs.xml定义步骤1创建的TransferJob

    此处定义了一个cron trigger,从0:00开始,每隔5分钟触发一次TransferJob。对应的语法,大家可以参看Quartz的官网

<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data
	xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
	version="1.8">

	<schedule>
		<job>
			<name>TransferJob</name>
			<group>DataBatchJobs</group>
			<description>Trigger the data migration script</description>
			<job-class>com.enix.dataxfer.scheduler.TransferJob</job-class>
		</job>

		<trigger>
			<cron>
				<name>TransferTrigger</name>
				<job-name>TransferJob</job-name>
				<job-group>DataBatchJobs</job-group>				
				<!-- 从0:00开始,每隔5分钟触发一次 -->
				<!-- Good morning guy... -->
				<cron-expression>0 0/5 0-23 * * ?</cron-expression>
			</cron>
		</trigger>
	</schedule>
</job-scheduling-data>


4. 添加Listener到web.xml

    最后一步,也就是要添加Quartz的listener到web.xml,这样JBOSS就会注册该listener,而定期执行任务。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	
	<!-- Quartz scheduler listener -->
	<listener>
    	<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class>
  	</listener>
  	
  	<!-- JFinal framework -->
	<filter>
		<filter-name>jfinal</filter-name>
		<filter-class>com.jfinal.core.JFinalFilter</filter-class>
		<init-param>
			<param-name>configClass</param-name>
			<param-value>com.enix.dataxfer.core.AppConfig</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>jfinal</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>


5. 部署程序,并查看运行日志

17:40:00,001 INFO  [stdout] (MyScheduler_Worker-1) Transfer job is started...
17:40:01,360 INFO  [stdout] (MyScheduler_Worker-1) Transfer job is ended...
17:45:00,002 INFO  [stdout] (MyScheduler_Worker-1) Transfer job is started...
17:45:01,367 INFO  [stdout] (MyScheduler_Worker-1) Transfer job is ended...
17:55:00,001 INFO  [stdout] (MyScheduler_Worker-1) Transfer job is started...
17:55:01,340 INFO  [stdout] (MyScheduler_Worker-1) Transfer job is ended...



你可能感兴趣的:(Quartz在JBOSS AS7中配置与使用)