Quartz 框架快速入门(三)

     在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建TriggerScheduler,其步骤如下:

首先创建一个Web项目,将quartz-1.6.0.jar,以及lib目录下面core下所有jaroptional目录下的所有commons-beanutils.jarcommons-digester-1.7.jarbuild目录下的jta.jar都放入Web项目的WEB-INF"lib目录下。

创建一个简单的jobHelloWorld,它的功能很简单,就是输出当前的时间,代码如下:

复制代码
package com.vista.quartz;

import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Helloworld implements Job
{
    
private static Log logger = LogFactory.getLog(Helloworld.class);//日志记录器
    public Helloworld()
    {
    }
    
public void execute(JobExecutionContext context) throws JobExecutionException 
    {
        logger.info(
"Hello World! - " + new Date()); 
    }
}
复制代码

然后按照上一篇文章《Quartz 框架快速入门(二)》中所讲述的内容编写quartz.properties文件。如果启动项目的时候,Quartz没有在工程中找到该文件,就会从自己的jar包下面读取其默认的properties文件,其内容如下

复制代码
#============================================================================
# Configure Main Scheduler Properties  
#============================================================================
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO
#============================================================================
# Configure ThreadPool  
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure JobStore  
#============================================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
#============================================================================
# Configure Plugins 
#============================================================================
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 = jobs.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
复制代码

然后编写任务配置文件jobs.xml,内容如下:

复制代码
<?xml version='1.0' encoding='utf-8'?>
<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
  xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation
="http://www.opensymphony.com/quartz/JobSchedulingData
  http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"

  version
="1.5">   
 
<job>      
    
<job-detail>      
     
<name>HelloWorld</name>      
     
<group>DEFAULT</group>      
     
<description>      
           A job that just for test       
     
</description>      
     
<job-class>      
            com.vista.quartz.Helloworld      
     
</job-class>      
     
<volatility>false</volatility>      
     
<durability>false</durability>      
     
<recover>false</recover>          
  
</job-detail>      
  
<trigger>      
    
<simple>      
     
<name>HelloTrigger1</name>      
     
<group>DEFAULT</group>      
     
<job-name>HelloWorld</job-name>      
     
<job-group>DEFAULT</job-group>      
     
<start-time>2008-09-03T15:56:30</start-time>      
     
<!-- repeat indefinitely every 10 seconds -->      
     
<repeat-count>-1</repeat-count>      
     
<repeat-interval>10000</repeat-interval>      
    
</simple>      
  
</trigger>      
</job>      
</quartz>
复制代码

可以看到,在配置文件中把jobdetailtrigger都作了完整的定义,并组合成一个job。下面,我们把上面两个文件都放入/WEB-INF/classes目录下,然后按照api中的说明修改一下web.xml,内容如下

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns
="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
    
<servlet>  
        
<servlet-name>QuartzInitializer</servlet-name>  
        
<display-name>Quartz Initializer Servlet</display-name>
        
<servlet-class>  
             org.quartz.ee.servlet.QuartzInitializerServlet  
        
</servlet-class>  
        
<load-on-startup>1</load-on-startup>  
        
<init-param>  
            
<param-name>config-file</param-name>  
            
<param-value>/quartz.properties</param-value>  
        
</init-param>  
        
<init-param>  
            
<param-name>shutdown-on-unload</param-name>  
            
<param-value>true</param-value>  
       
</init-param>  
    
</servlet>  
  
<welcome-file-list>
    
<welcome-file>index.jsp</welcome-file>
  
</welcome-file-list>
</web-app>
复制代码

这样,在启动Tomcat的时候,QuartzInitializerServlet这个Servlet就会自动读取quartz.properties这个配置文件,并初始化调度信息,启动Scheduler

启动tomcat后,就可以看到输出的结果:

posted on   Phinecos(洞庭散人)  阅读(7597)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

导航

统计

点击右上角即可分享
微信分享提示