1. 往pom.xml文件添加如下依赖:
<properties> <testng.version>6.4</testng.version> <spring.version>3.1.2.RELEASE</spring.version> <quartz.version>1.8.4</quartz.version> <slf4j.api.version>1.7.5</slf4j.api.version> </properties> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>${testng.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- Logging support --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.api.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.api.version}</version> </dependency> </dependencies>
2. 在类路径下新建quartz-config.properties文件:
# 线程池实现类 org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool # 线程池大小 org.quartz.threadPool.threadCount=10
以及log4j.properties文件
log4j.rootLogger=debug, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller's file name and line number. log4j.appender.stdout.layout.ConversionPattern=%-5p [%t] (%F:%L) -%m%n
3. 任务类:
public class HelloJob implements Job { private static final Logger log = LoggerFactory.getLogger(HelloJob.class); @Override public void execute(JobExecutionContext context) throws JobExecutionException { log.info("Hello World! - " + new Date()); } }
4. 任务调度类:
public class SchedulerUtil { public static Scheduler getScheduler(String configFile) throws Exception { // 加载配置文件,其中必须指定线程池实现类和大小,否则后续的getScheduler()调用会报错 Properties props = new Properties(); InputStream inStream = SimpleExample.class.getClassLoader() .getResourceAsStream(configFile); props.load(inStream); // 根据指定的配置来实例化StdSchedulerFactory SchedulerFactory sf = new StdSchedulerFactory(props); // 创建一个调度器(默认内存存储) Scheduler sched = sf.getScheduler(); return sched; } }
public class SimpleExample { public void run() throws Exception { // 获取一个调度器实例 SchedulerUtil.getScheduler("quartz-config.properties); // 任务类封装成标准的JobDetail对象: JobDetail job = new JobDetail("job1", "group1", HelloJob.class); // 指定一个运行时刻 Date runTime = TriggerUtils.getEvenMinuteDate(new Date()); // 实例化一个简单触发器,在指定时刻触发 SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1", runTime); // 调度器通过触发器调度指定任务 sched.scheduleJob(job, trigger); // 启动调度器,在这之前,所有任务都不会执行 sched.start(); // 调度线程休眠,让线程池有时间去运行任务 TimeUnit.SECONDS.sleep(70L); // 优雅地关闭调度器 // 参数true表示等所有任务都执行完成后才关闭。 sched.shutdown(true); } public static void main(String[] args) throws Exception { SimpleExample example = new SimpleExample(); example.run(); } }
5. 运行main,查看输出结果。
INFO [QuartzScheduler_Worker-1] (HelloJob.java:27) -Hello World! - Mon Nov 04 20:45:00 CST 2013
参考:
http://quartz-scheduler.org/documentation/quartz-1.x/examples/Example1