定时执行任务quartz用法

来源:互联网 发布:阿里云服务器配置教程 编辑:程序博客网 时间:2024/04/30 22:36

定时执行某个或者某些任务的需求是常有发生,要解决此问题总共有两种方法,一种是通过开源的quartz框架完成,此框架由Java语言编写;另一种就是Java自带的定时器Timer。在本篇文章中我们将介绍quartz框架的使用方法。

操作步骤:

1、编写一个实现接口org.quartz.job的类,此接口中只有一个方法execute:

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;public class BackupDatabaseQuartzJob implements Job {   @Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {// TODO Auto-generated method stub        System.out.println("开始执行备份数据操作");}}

2、编写一个调度器,通过那个调度器来执行此任务。关于调度器,quartz总共分为两种——CronTrigger和SimpleTrigger。

import org.quartz.CronExpression;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;public class BackupDatabaseScheduler {/*** 调度任务* * @throws SchedulerException void*/public void task() throws SchedulerException {// 实例化一个调度器工厂SchedulerFactory schedulerFactory = new StdSchedulerFactory();// 创建 一个 调度器Scheduler scheduler = schedulerFactory.getScheduler();// 此三个参数是必传的JobDetail jobDetail = new JobDetail("jobDetailName", "jobDetailGroup",BackupDatabaseQuartzJob.class);CronTrigger cronTrigger = new CronTrigger("cronTrigger","cronTriggerGroup");try {// 参数共七个:秒、分、时、月内日期、月、周内日期、年(可选)CronExpression cexp = new CronExpression("0 0 0 * * ?");cronTrigger.setCronExpression(cexp);} catch (Exception e) {e.printStackTrace();}scheduler.scheduleJob(jobDetail, cronTrigger);scheduler.start();}public static void main(String args[]) {try {BackupDatabaseScheduler qRunner = new BackupDatabaseScheduler();qRunner.task();} catch (Exception e) {e.printStackTrace();}}}

分析类和方法:

1、JobDetail

JobDetail是用来包装Job实例的具体细节的。Job以class的方式传入JobDetail,quartz会自动实例化Job类的。同时需要规定job的name和group,在jobdetail的validate()下,一个job是必须有name和group属性,并且二者组合标示唯一的job。JobDetail中的一些重要数据存放在JobDataMap中,这个map可以用来在控制程序和job内传递需要传递的参数。
JobDetail还有三个重要的boolean值的属性,分别是durability、volatility、shouldRecover。这三个属性默认是false,主要在数据库操作的时候起作用。

2、CronExpression

用来设置调度的时间,就如注释上说的那样,总共有七个参数,最后一个是可选的,因此,当不涉及到年的时候你可以只写留个参数,这样讲应该很清楚了吧。可能比较头疼的是不知道里面的特殊字符是啥意思,呵呵,接下来我们就来讲讲此定时器里面的特殊字符:

Cron 触发器利用一系列特殊字符,如下所示:

  • 反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。

  • 问号(?)字符和字母 L 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”,否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。

  • 在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中,表示把执行安排在当月的第一个工作日内。

  • 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。

  • 星号(*)字符是通配字符,表示该字段可以接受任何可能的值。
如:

---、 代码中的时间表示每天的零点进行任务调度;

---、 0 15 10 ? * MON-FRI:将在星期一到星期五的每天上午10点15分执行一个作业。

---、 0 15 10 ? * 6L 2002-2005:将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。


3、TriggerUtils:相当于一个trigger factory,方便我们取得特殊trigger的实例,而不用自己去构造。

4、rescheduleJob:可以实现如每天、每周、每月的重复操作

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 永久单车收不到验证码怎么办 24速山地车档乱了怎么办 新电瓶车被偷了怎么办 汽车前风挡玻璃砸出洞怎么办 凯迪拉克xt5钥匙掉了怎么办 凯迪拉克xt5媒体不好用怎么办 晒黄的白鞋怎么办 白鞋子被晒黄了怎么办? 耐克空军一号白色发黄怎么办 空军一号破皮了怎么办 匡威鞋帆布破了怎么办 脚腕起疙瘩很痒怎么办 跑步后脚踝微疼怎么办 跑步跑得脚疼怎么办 nike air 鞋头脱胶怎么办 耐克空军一号磨脚怎么办 白鞋刷完变黄了怎么办 乔丹气垫坏了怎么办 气垫鞋气垫坏了怎么办 建行u盾忘记密码怎么办 工商银行u盾忘记密码怎么办 民生银行不给u盾怎么办 银行不给开u盾怎么办 有车有空想赚点外快怎么办 车被注册了滴滴怎么办 快手号手机丢了怎么办 手机号码不停收到验证码怎么办 手机网页滑动自动跳到最下面怎么办 网页一打开就跳至评论怎么办? 百度总出现重复的网页怎么办 苹果7一直处于系统升级页面怎么办 手机看百度文章总是跳转怎么办 美度舵手滑丝怎么办 小区房产证办不下来怎么办 美海军陆战队进驻台湾大陆怎么办? 束脚裤带子怎么办系 眼角弄伤了应该怎么办 浴盆下水盖坏了怎么办 冒险岛勋章多了怎么办 玉手镯取不下来怎么办?终极绝招! 陆金所收益低怎么办