quartz定时任务 & spring整合quartz
概述
今天分享的这个技术应用场景 我就不多说了, 想想你什么时候需要闹钟就明白应用场景 , OK下面说说安装使用以及如何整合到我们的spring的中
突然想diss一下spring 虽然大家都在用可是看过它的源码的都知道 可扩展性太差了 你要使用spring就必须遵循它的一切配置 从主观意愿上来说用户是不情愿的, 从技术上我们都是各种spring整合xxx 没见过xx整合spring的 用多了难受
使用
-
quartz基本原理
- 任务: 具体执行的工作
- 触发器: 在特定时间触发任务的执行
- 调度器: 任务的实际执行者 负责整合任务和触发器
-
导入Maven依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.6</version>
</dependency>
-
实现Job接口 在execute方法内实现自己的定时业务
-
创建任务
//第一个参数: 代表任务名 //第二个参数: 对于多个任务指定一个组 也可以自定义 JobDetail detail = new JobDetail("any", "any", MyJob.class);
-
创建触发器
//创建触发器
//第一个参数: 触发器名称自定义
//第二个参数: 触发的定时策略: 这里是重复时间间隔 3秒一次
SimpleTrigger trigger = new SimpleTrigger(
"myTrigger",
SimpleTrigger.REPEAT_INDEFINITELY,
3000
);
//指定触发器的开启时间
trigger.setStartTime(new Date(System.currentTimeMillis() + 1000));
-
定义调度器整合任务和触发器
//创建调度器工厂 拿到一个调度器 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); //注册 任务和触发器 scheduler.scheduleJob(job, trigger); //启动任务 scheduler.start(); //scheduler.shutdown();
说明
上面是个小demo 有注意到一个触发器SimpleTrigger
它的使用场景: 固定时间间隔的调度任务, 可以设置任务的开始时间 结束时间 重复次数 以及时间间隔
而对于有些情况下我们需要指定时间点来执行任务 比如闹钟
这个时候需要它的子类 -------Contrigger
所以更多的场景是使用这个子类触发器:
CronTrigger trigger2 = new CronTrigger("myTirgger", "groupName", "* 12 17 ? * *");
前两个参数和父类一样 最后一个是子类特有的cron表达式 上面的含义代表每天的17.12执行这个定时任务
-
关于cron表达式
位置 含义 范围 允许的特殊字符 1 秒 0 ~ 59 * / 2 分钟 0 ~ 59 * / 3 小时 0 ~ 23 * / 4 天 1 ~ 31 * / ? L 5 月份 1 ~ 12 或 JAN ~ DEC * / 6 星期 1 ~ 7 或 SUN ~ SAT * / ? L # 7 年份 1970 ~ 2099 * / 说明
1. 使用cron表达注意从左往右是时间是倒序的(想想英文时间的书写) 且最好有空格间隔
2. 表达式至少要有6个元素 少于6个必然报错
关于通配符
-
***** : 表示每一个值 用于所有字段
-
? : 仅用于
天
和星期
表示不指定值- 记忆方法: 周日没有问号
-
- : 表示时间范围 范围连续
-
, : 表示一个时间点列表 不必连续
-
/: 通常表示x/y x为起始值 y代表增量 只有y=1才会连续
需要注意: 不能同时使用
?
也不能同时使用*
, 否则都会报错
-
一些列子
cron表达式 含义 0 15 4 * * ? 每天凌晨4.15启动 一次 30 0 0 1 1 ? 2014 2014年1月1日0点0分30秒执行一次 0 0 14 1,10,20 * ? * 每月的1,10,20的下午2点执行一次 0 0/5 15,17 * * ? 每天的15点 到 16点 每5分钟执行一次 , 每天的17点到18点每5分钟执行一次
-
spring 整合quartz
-
XML方式
实际上就是将上面的代码注入到spring中, 怎么注入百度一下 吧我采用下面给予注解的配置 仅仅需要一个注解就能完成上面的所有代码
-
注解方式
@Scheduled(cron="表达式")
这个方式属实香
Over
总的来说这个定时技术很好理解 使用也是方便 还在等什么赶紧加入到你的项目中 提升一个逼格吧