最近做项目用到定时器,在此与大家分享一下!!
Quartz(任务调度框架)
Quartz是OpenSymphony开源组织在Job schsduing领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。
Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做标准的Java组件或EJBs. —— [ Quartz官网 ]
从官网上下载的jar包,除了所需的包外,还有基本满足需求的Demo
Quartz是一个任务日程管理系统,一个在预先确定的时间到达时,执行任务
Quartz的核心接口常用的有4个:
Scheduler - 核心调度器
Job - 任务
JobDetail - 任务描述
Trigger - 触发器
简单说明一下Quartz核心接口之间的关系
接下来简单说一下Trigger的分类
Trigger | 触发器 |
---|---|
SimpleTrigger | 进行简单的触发:如每日的5点执行一次;每分钟执行一次 |
CronTrigger | 进行复杂的触发:如每月的第几周第几天什么时候执行 |
下面针对SimpleTrigger进行简单的触发
代码块
实现Job接口,获得execute的方法
public class HelloJob implements Job {
private static Logger _log = LoggerFactory.getLogger(HelloJob.class);
public HelloJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
// Say Hello to the World and display the date/time
_log.info("Hello World! - " + new Date());
}
}
这里对Job任务进行简单的一个调度
public class SimpleExample {
public void run() throws Exception {
Logger log = LoggerFactory.getLogger(SimpleExample.class);
log.info("------- Initializing ----------------------");
// 定义调度器
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
log.info("------- Initialization Complete -----------");
// 获取当前时间的下一分钟
Date runTime = evenMinuteDate(new Date());
log.info("------- Scheduling Job -------------------");
// 定义job
// 在quartz中,有组的概念,组+job名称 唯一的
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
// 定义触发器,在下一分钟启动
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
// 将job注册到调度器
sched.scheduleJob(job, trigger);
log.info(job.getKey() + " will run at: " + runTime);
// 启动调度器
sched.start();
log.info("------- Started Scheduler -----------------");
// 等待65秒
log.info("------- Waiting 65 seconds... -------------");
try {
// wait 65 seconds to show job
Thread.sleep(65L * 1000L);
// executing...
} catch (Exception e) {
//
}
// 关闭调度器
log.info("------- Shutting Down ---------------------");
sched.shutdown(true);
log.info("------- Shutdown Complete -----------------");
}
public static void main(String[] args) throws Exception {
SimpleExample example = new SimpleExample();
example.run();
}
}
进行处理
这是一个简单的触发!
后续会在继续深造!!望大家多多指点!!