在本教程中,我们向您展示如何通过Quartz库中的QuartzInitializerListener
侦听器类在JSF Web应用程序中运行Quartz作业。 该解决方案不仅适用于JSF 2,该概念几乎适用于所有标准Java Web应用程序。
使用的工具 :
- JSF 2.1.11
- 石英2.1.5
- Maven 3
- Eclipse 4.2
- 雄猫7
重用了先前的JSF 2.0 hello world示例 ,我们将通过QuartzInitializerListener
侦听器类对其进行增强,以支持Quartz作业。
PS本教程仅专注于Quartz集成,对于JSF,请阅读上面的JSF hello world示例。
1.项目文件夹
查看最终项目目录结构。
![jsf-quartz-project-directory project directory structure](https://www.mkyong.com/wp-content/uploads/2012/07/jsf-quartz-project-directory.png)
2.依存关系
要在Tomcat上进行部署,您需要许多JSF依赖项。 阅读XML注释以获取详细信息。
档案:pom.xml
<dependencies>
...
<!-- JSF 2 libraries -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.11</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.11</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
</dependency>
<!-- Tomcat 6 need this -->
<dependency>
<groupId>com.sun.el</groupId>
<artifactId>el-ri</artifactId>
<version>1.0</version>
</dependency>
<!-- Quartz scheduler framework -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.5</version>
</dependency>
<!-- Quartz need transaction -->
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
...
3.石英作业
创建一个Quartz作业类。 该课程将安排在以后运行。
文件:SchedulerJob.java
package com.mkyong.scheduler;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SchedulerJob implements Job {
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
System.out.println("JSF 2 + Quartz 2 example");
}
}
4.石英配置
创建quartz.properties
和quartz-config.xml
,将其放在资源“文件夹”(Maven结构)中,对于非Maven项目,请确保可以将其放置在项目类路径中。
文件:quartz.properties –配置Quartz实例并从quartz-config.xml
读取设置
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
文件:quartz-config.xml –配置触发器以运行com.mkyong.scheduler.SchedulerJob
<?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>AJob</name>
<group>AGroup</group>
<description>Print a welcome message</description>
<job-class>com.mkyong.scheduler.SchedulerJob</job-class>
</job>
<trigger>
<cron>
<name>dummyTriggerName</name>
<job-name>AJob</job-name>
<job-group>AGroup</job-group>
<!-- It will run every 5 seconds -->
<cron-expression>0/5 * * * * ?</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
注意
有关详细说明,请阅读此Quartz配置参考文章。
5.整合石英
这就是整合发生的地方。 在web.xml
文件中将org.quartz.ee.servlet.QuartzInitializerListener
声明为侦听器类。
档案:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
<listener>
<listener-class>
org.quartz.ee.servlet.QuartzInitializerListener
</listener-class>
</listener>
</web-app>
6.演示
在项目启动期间,Quartz会启动并每5秒运行一次计划的作业。
Jul 26, 2012 3:32:18 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Jul 26, 2012 3:32:18 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Jul 26, 2012 3:32:18 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3591 ms
JSF 2 + Quartz 2 example
JSF 2 + Quartz 2 example
JSF 2 + Quartz 2 example
下载源代码
下载它– JSF-Quartz-Example.zip (25 kb)
参考文献
- Quartz 2 Scheduler教程
- 石英配置参考
- JSF 2.0 Hello World示例
- XMLSchedulingDataProcessorPlugin JavaDoc
- 好的Quartz Scheduler作业示例