内容
- Eclipse项目
- 与Maven
- 少XML
Eclipse项目
如果您在Eclipse中使用典型项目,则最基本的示例的结构类似于:
C:.|+---src| | log4j.dtd| | log4j.xml| | quartz.properties| | quartz_data.xml| || ---org| ---paulvargas|---test| ---quartz| TestJob.java|---WebContent ---WEB-INF | web.xml | ---lib jta-1.1.jar log4j-1.2.17.jar quartz-2.1.5.jar slf4j-api-1.6.5.jar slf4j-log4j12-1.6.5.jar
每个文件的代码如下:
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <listener> <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener></web-app>
quartz.properties
# ----------------------------- Threads --------------------------- ## How many jobs can run at the same time?org.quartz.threadPool.threadCount=5# ----------------------------- Plugins --------------------------- ## Class to load the configuration data for each job and trigger.# In this example, the data is in an XML file.org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
quartz_data.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_2_0.xsd" version="1.8"> <schedule> <job> <name>TestJob</name> <job-class>org.paulvargas.test.quartz.TestJob</job-class> </job> <trigger> <cron> <name>TestJob</name> <job-name>TestJob</job-name> <cron-expression>0 0/5 * 1/1 * ? *</cron-expression> </cron> </trigger> </schedule></job-scheduling-data>
该作业被执行每5分钟(参见式
0 0/5 * 1/1 * ? *中
cron-expression标记)。如果您想要另一个表达式,则可以使用
http://www.cronmaker.com/
TestJob.java
package org.paulvargas.test.quartz;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class TestJob implements Job { @Override public void execute(final JobExecutionContext ctx) throws JobExecutionException { System.out.println("Executing Job"); }}log4j.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd" ><log4j:configuration> <appender name="STDOUT" > <layout > <param name="ConversionPattern" value="%d %-5p (%c.java:%L).%M - %m%n"/> </layout> </appender> <root> <priority value="TRACE" /> <appender-ref ref="STDOUT"/> </root></log4j:configuration>
与Maven
如果使用的是Maven,则同一项目的结构为:
C:.| pom.xml|---src ---main +---java | ---org | ---paulvargas |---test | ---quartz | TestJob.java | +---resources | log4j.dtd | log4j.xml | quartz.properties | quartz_data.xml | ---webapp | index.jsp | ---WEB-INF web.xml
和文件
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>test</groupId> <artifactId>BasicQuartz</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>BasicQuartz</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz-jobs</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build></project>
少XML
*这需要Servet 3.0+(Tomcat 7 +,Glassfish 3 +,JBoss AS 7)
您只需要两个文件:
TestJob.java上一个示例和以下侦听器:
import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.annotation.WebListener;import org.quartz.CronScheduleBuilder;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.ee.servlet.QuartzInitializerListener;import org.quartz.impl.StdSchedulerFactory;@WebListenerpublic class QuartzListener extends QuartzInitializerListener { @Override public void contextInitialized(ServletContextEvent sce) { super.contextInitialized(sce); ServletContext ctx = sce.getServletContext(); StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute(QUARTZ_FACTORY_KEY); try { Scheduler scheduler = factory.getScheduler(); JobDetail jobDetail = JobBuilder.newJob(TestJob.class).build(); Trigger trigger = TriggerBuilder.newTrigger().withIdentity("simple").withSchedule( CronScheduleBuilder.cronSchedule("0 0/1 * 1/1 * ? *")).startNow().build(); scheduler.scheduleJob(jobDetail, trigger); scheduler.start(); } catch (Exception e) { ctx.log("There was an error scheduling the job.", e); } }}为避免冲突,请勿同时设置默认侦听器
web.xml。在最后一个示例中,默认线程数为10。由于调度程序以待机模式启动,因此有必要调用
scheduler.start();。该
"simple"标识是可选的,但你可以用它来重新安排工作(太棒了!)。例如:
ServletContext ctx = request.getServletContext();StdSchedulerFactory factory = (StdSchedulerFactory) ctx.getAttribute(QuartzListener.QUARTZ_FACTORY_KEY);Scheduler scheduler = factory.getScheduler();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("simple").withSchedule( CronScheduleBuilder.cronSchedule(newCronexpression)).startNow().build();Date date = scheduler.rescheduleJob(new TriggerKey("simple"), trigger);


