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钟调用一次,一切正常.
- Quartz 入门
- Quartz入门
- quartz入门
- Quartz入门
- Quartz入门
- Quartz入门
- Quartz入门
- Quartz入门
- Quartz入门
- 【Quartz】Quartz任务调度入门
- Quartz(01) Quartz快速入门
- Quartz入门到精通
- Quartz.NET 入门
- Quartz快速入门指南
- Quartz使用入门
- quartz入门实例
- Quartz---入门级实例
- Quartz.net 入门 总结
- CF Beta Round #89 (Div. 2) - Caesar's Legions
- UItableViewCell的复用机制,原理解答
- 嵌入式编译器常用输出格式--Intel 32 bit Hex
- UNIX文件属性(3)
- ADS下的分散加载文件应用实例
- quartz入门
- ARM中B __Main和B Main的区别
- protobuf学习笔记
- ARM7嵌入式系统中Bootloader分析与设计
- Android 中LayoutInflater的使用
- setContentType() 方法
- POJ 3378 / UESTC 1460 - Crazy Thairs
- C++控制鼠标自动定时点击
- RyMiniFramework(1)-菜鸟的灵光一闪