Quartz备忘录

Quartz是OpenSymphony开源组织在Job scheduling领域一个开源项目之一,它可以与J2EE与J2SE应用程序相结合也可以单独使用。

该项目主页:http://www.opensymphony.com/quartz

这里记录的是在一个单纯的web工程中的简单使用方法(只是个拷贝文件目录的例子)

新建的工程如图所示

第一步:导入quartz的jar包及其他想关的包(jta.jar需要导入,否则运行会有异常[java.lang.NoClassDefFoundError: javax/transaction/UserTransaction],log4j是记录日志的包;另外两common包是由于在工程中使用的是xml文件定义定时任务,所有需要)

第二步:修改web.xml,增加quartz配置信息,使得web工程启动时候能够初始化quartz信息,添加如下信息:

<!-- Quartz 配置信息 -->
 <servlet>
  <display-name>Quartz Initializer Servlet</display-name>
  <servlet-name>QuartzInitializer</servlet-name>
  <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
  <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>
  <init-param>
   <param-name>start-scheduler-on-load</param-name>
   <param-value>true</param-value>
  </init-param>
  <load-on-startup>0</load-on-startup>
 </servlet>

第三步:在src目录下添加quartz的属性文件(quartz.properties)和任务定义文件(quartz_job.xml)以及log4j日志文件

quartz.properties

org.quartz.scheduler.instanceName = FilesyncScheduler    
org.quartz.scheduler.instanceId = one  
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool     
org.quartz.threadPool.threadCount = 3    
org.quartz.threadPool.threadPriority = 4
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore  
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin  
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 10
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

 

quartz_job.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>FileSyncJob</name>
            <group>FileGroup</group>
            <job-class>com.go.task.FileCopyJob</job-class>
            <job-data-map allows-transient-data="true">
             <entry>
              <key>command</key>
              <value>xcopy D://work//XMLData c://Media /s</value>
             </entry>
            </job-data-map>
        </job-detail>
        <trigger>
            <cron>
                <name>trigger1</name>
                <group>triggerGroup1</group>
                <job-name>FileSyncJob</job-name>
                <job-group>FileGroup</job-group>
                <cron-expression>0 0 * ? * MON-FRI</cron-expression>
            </cron>
        </trigger>
    </job>
</quartz>

 

log4j.properties

log4j.rootCategory=INFO,stdout,fileout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d LV:%5p CL:%c%t] %m%n

#log4j.appender.fileout.encoding=UTF-8
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File=D/://workarea//log.log
log4j.appender.fileout.MaxFileSize=5MB
log4j.appender.fileout.MaxBackupIndex=100
log4j.appender.fileout.Append=true
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p [%C.%M():%L] %m%n

第四步:定义拷贝文件任务的类,需要实现org.quartz.Job接口并实现execute方法,该方法为任务执行时执行的方法。

FileCopyJob.java

package com.go.task;

import java.io.IOException;
import java.util.Date;

import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class FileCopyJob implements Job {
 Logger logger = Logger.getLogger(FileCopyJob.class);
 public void execute(JobExecutionContext context)
   throws JobExecutionException {
  JobDataMap jobDataMap=context.getMergedJobDataMap();
  String command=jobDataMap.getString("command");
  try {
   Runtime.getRuntime().exec(command);
  } catch (IOException e) {
   logger.error(e);
  }
  logger.info(new Date()+" 任务执行中 "+command);
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值