quartz系列之一:Hello World

quartz是一款功能强大的任务调度框架。

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

猜你喜欢

转载自czj4451.iteye.com/blog/1971199
今日推荐