quartz是一款功能强大的任务调度框架。
[color=violet]1. 往pom.xml文件添加如下依赖:[/color]
[color=violet]2. 在类路径下新建quartz-config.properties文件:[/color]
以及log4j.properties文件
[color=violet]3. 任务类:[/color]
[color=violet]4. 任务调度类:[/color]
[code]
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();
}
}
[/code]
[color=violet]5. 运行main,查看输出结果。[/color]
INFO [QuartzScheduler_Worker-1] (HelloJob.java:27) -Hello World! - Mon Nov 04 20:45:00 CST 2013
参考:
[url]http://quartz-scheduler.org/documentation/quartz-1.x/examples/Example1[/url]
[color=violet]1. 往pom.xml文件添加如下依赖:[/color]
<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>
[color=violet]2. 在类路径下新建quartz-config.properties文件:[/color]
# 线程池实现类
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
[color=violet]3. 任务类:[/color]
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());
}
}
[color=violet]4. 任务调度类:[/color]
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;
}
}
[code]
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();
}
}
[/code]
[color=violet]5. 运行main,查看输出结果。[/color]
INFO [QuartzScheduler_Worker-1] (HelloJob.java:27) -Hello World! - Mon Nov 04 20:45:00 CST 2013
参考:
[url]http://quartz-scheduler.org/documentation/quartz-1.x/examples/Example1[/url]