quartz入门

来源:互联网 发布:推荐一部电影 知乎 编辑:程序博客网 时间:2024/06/05 05:12

1.下载quartz1.8.4,并将commons-dbcp-1.3.jar,commons-pool-1.5.4.jar,jta-1.1.jar,log4j-1.2.14.jar,quartz-all-1.8.4.jar,slf4j-api-1.6.0.jar,slf4j-log4jl2-1.6.0.jar拷贝到lib包下.

2.编写Job

package me.hujun.demo.quartz;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class MyJob implements Job {public void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("Start MyJob at " + new Date());}}


3.编写quartz.properties

 

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

#org.quartz.scheduler.instanceName = DefaultQuartzScheduler
#org.quartz.scheduler.rmi.export = false
#org.quartz.scheduler.rmi.proxy = false
#org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
#org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#org.quartz.jobStore.misfireThreshold = 60000

#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true
#org.quartz.plugin.jobInitializer.scanInterval = 120
#org.quartz.plugin.jobInitializer.wrapInUserTransaction = false

 

4.编写quartz_jobs.xml

<?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>my_job</name><group>DEFAULT</group><description> this is HelloWorld......</description><job-class>me.hujun.demo.quartz.MyJob</job-class></job><trigger><cron><name>my_job_trigger</name><job-name>my_job</job-name><cron-expression>0/10 * * * * ?</cron-expression></cron></trigger></schedule></job-scheduling-data>

 

5.配置servlet加载启动scheduler

<?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">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <servlet>                <servlet-name>quartz</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>1</load-on-startup>        </servlet></web-app>


 

运行结果出乎意料:

Start MyJob at Sat Jul 28 12:42:20 CST 2012
Start MyJob at Sat Jul 28 12:42:20 CST 2012
Start MyJob at Sat Jul 28 12:42:20 CST 2012
Start MyJob at Sat Jul 28 12:42:30 CST 2012
Start MyJob at Sat Jul 28 12:42:30 CST 2012
Start MyJob at Sat Jul 28 12:42:30 CST 2012
Start MyJob at Sat Jul 28 12:42:40 CST 2012
Start MyJob at Sat Jul 28 12:42:40 CST 2012
Start MyJob at Sat Jul 28 12:42:40 CST 2012

即job每隔10S总是被调到了三次.

 

查日志如下:

2012-7-28 12:22:06 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\program\myeclipse6.0.1\bin;D:\tomcat6.0.16\bin
2012-7-28 12:22:07 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2012-7-28 12:22:07 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 2270 ms
2012-7-28 12:22:07 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2012-7-28 12:22:07 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.16
2012-7-28 12:22:10 org.apache.catalina.core.ApplicationContext log
信息: quartz: Quartz Initializer Servlet loaded, initializing Scheduler...
log4j:WARN No appenders could be found for logger (org.quartz.core.SchedulerSignalerImpl).
log4j:WARN Please initialize the log4j system properly.
2012-7-28 12:22:12 org.apache.catalina.core.ApplicationContext log
信息: quartz: Scheduler has been started...
2012-7-28 12:22:12 org.apache.catalina.core.ApplicationContext log
信息: quartz: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY

2012-7-28 12:22:14 org.apache.catalina.core.ApplicationContext log
信息: quartz: Quartz Initializer Servlet loaded, initializing Scheduler...
log4j:WARN No appenders could be found for logger (org.quartz.core.SchedulerSignalerImpl).
log4j:WARN Please initialize the log4j system properly.
2012-7-28 12:22:16 org.apache.catalina.core.ApplicationContext log
信息: quartz: Scheduler has been started...
2012-7-28 12:22:16 org.apache.catalina.core.ApplicationContext log
信息: quartz: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY
2012-7-28 12:22:17 org.apache.catalina.core.ApplicationContext log
信息: quartz: Quartz Initializer Servlet loaded, initializing Scheduler...
log4j:WARN No appenders could be found for logger (org.quartz.core.SchedulerSignalerImpl).
log4j:WARN Please initialize the log4j system properly.
2012-7-28 12:22:19 org.apache.catalina.core.ApplicationContext log
信息: quartz: Scheduler has been started...
2012-7-28 12:22:19 org.apache.catalina.core.ApplicationContext log
信息: quartz: Storing the Quartz Scheduler Factory in the servlet context at key: org.quartz.impl.StdSchedulerFactory.KEY

2012-7-28 12:22:19 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2012-7-28 12:22:20 org.apache.jk.common.ChannelSocket init
信息: JK: ajp13 listening on /0.0.0.0:8009
2012-7-28 12:22:20 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=0/234  config=null
2012-7-28 12:22:20 org.apache.catalina.startup.Catalina start
信息: Server startup in 13610 ms
Start MyJob at Sat Jul 28 12:22:20 CST 2012
Start MyJob at Sat Jul 28 12:22:21 CST 2012
Start MyJob at Sat Jul 28 12:22:21 CST 2012

从日志中可以看出,Quartz Initializer Servlet loaded, initializing Scheduler... 出现三次,从而明确quartz调度器被加载了三次.继续回推,说明加载quartz调度器的servlet被加载了三次.根据<load-on-startup>1</load-on-startup>知道servlet在应用调动时即被加载初始化,所以说明这个应用被加载了三次,为什么呢?

 

从D:\tomcat6.0.16\conf\server.xml中发现:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

</Host>
<Host name="caipiao.360buy.net" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false"/>
<Host name="man.caipiao.360buy.net" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false"/>

方然大悟,原来这个tomcat配置了三个虚拟主机,appBase都是webapps,而前面例子的quartz应用就放在了webapps包下,三个虚拟主机对webapps下的公共应用都进行了加载,也就是加载三次,应用被加载的时候,servlet即被加载初始化,所以调用了三套quartz框架.也可以理解为在本tomcat下管理了三个简单的quartz应用,所以执行结果总是跑三次.

去年两个Host,只留一个虚拟主机,发现Job每隔10S钟调用一次,一切正常.

 

原创粉丝点击