首页 > 代码库 > quartz实现定时任务调度
quartz实现定时任务调度
一. 业务需求:
实际工作中我们通常会遇到这样的需求: 使用Ajax技术每隔几秒从缓存或数据库中读取一些数据, 然后再显示在页面上, 目前有一个比较好的定时调度框架: quartz可以满足我们的需求.
二. 核心类:
Job: 一个接口, 它里面只有一个方法void execute(),我们需要执行任务就需要实现这个接口,在execute中实现我们要做的事情。
JobDetail: 在Quartz每次执行Job时,都需要创建一个Job实例,所以它直接接受一个实现类以便运行时实例化,还需要一个描述信息,
JobDetail就是做这个事情。
Trigger: 是一个抽象类,描述触发执行的时间,它主要有SimpleTrigger和CronTrigger这两个子类,当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等。
Scheduler: 可以认为是quartz的调度器,我们把JobDetail和Trigger注册到Scheduler,由它调度运行。
三. 简单例子:
1. 所需jar包:
2. MyJob.java
/** * 创建一个MyJob类, 实现Job接口, 为省事测试方法也写在这个类中 */ public class MyJob implements Job{ // 测试方法 public static void main(String[] args) { Scheduler scheduler = null; try { // 创建一个JobDetail实例 JobBuilder jobBuilder = JobBuilder.newJob(MyJob.class); jobBuilder.withDescription(" read data from DB."); JobDetail jobDetail = jobBuilder.build(); // 创建一个调度规则, 每3s运行一次 SimpleScheduleBuilder simpleBuilder = SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever(); Trigger trigger = TriggerBuilder.newTrigger().withSchedule(simpleBuilder).startNow().build(); // 从工厂中获取一个调度器Scheduler SchedulerFactory schedulerFactory = new StdSchedulerFactory(); scheduler = schedulerFactory.getScheduler(); // 注册jobDetail, trigger到调度器Scheduler scheduler.scheduleJob(jobDetail, trigger); // 开始执行Job scheduler.start(); } catch (Exception e1) { try { // 出异常了, 停止执行Job scheduler.shutdown(); } catch (SchedulerException e2) { e2.printStackTrace(); } e1.printStackTrace(); } } @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { String description = jobExecutionContext.getJobDetail().getDescription(); System.out.println("定时Job开始运行: " + description); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。