定时任务

       今天有系统对接需要使用接口推送历史数据,因为是小程序的后台,不能写一个按钮来调用方法推送历史数据,就想通过定时任务来向其他系统推送历史数据。

      目前定时任务的种类有四种:

名称 特点
quartz quartz 是一个开源组织提供的功能强大的开源项目,既能按照一个指定的时间进行简单的调度作业,也能根据一个时间间隔进行循环调度作业,还能把多个作业和多个不同的触发器进行关联,进行复杂的调度作业
spring task 是一个相较于quartz轻量的定时任务框架,从spring3.0后spring就把task整合进去,如果使用的话不需要额外引入jar包,springboot项目下可以很简单的实现大部分的业务需求,并且实现起来很简单,缺点下面会涉及到
timer java中自带的定时任务,缺点比多
scheduledExecutorService java1.5后新增的定时任务,进行简单的任务调度,跟timer相比推荐使用这一个

   要了解的是

              1 每种定时任务支持做什么

              2定时任务中的cron 的写法和意义

 

 

        cron表达式详解:

       cron表达式是一个控制触发调度任务时间的字符串,这个表达式中是有至少6(最多7个)个时间域,并且时间域之间用空格隔开。为什么会有至少6个时间域最多7个时间域这种说法呢?第一不同的定时允许的cron表达式不同,spring task的cron允许的如时间域就是6个,没有年的时间域,如果不为6个数量会报错(Cron expression must consist of 6),而quartz是七个时间域;第二

quartz的七个时间域中的年可以省略不写。

          由左03向右时间域代表的意义:

                       

时间域 含义 允许出现字符 有效范围
seconds “, - * /”四个特殊字符 0-59的整数
minutes “, - * /”四个特殊字符 0-59的整数
hours 小时 “, - * /”四个特殊字符 0-59的整数
dayofMonth 一个月中第几天 “, - * / ? L W C”八个特殊字符 0-31整数
month “, - * /”四个特殊字符 1-12或JAN-DEC
dayofweek 一周内第几天 ",- * / ? L C #"八个字符 1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一
year 年(spring task不存在,quartz可以省略不写) “, - * /”四个特殊字符 1970-2099

 

                     特殊字符的含义:

                       

符号 意义 使用域
* 在该时间域匹配任何值 所有时间域
枚举值逗号前后的值都会执行 所有时间域
/ 开始时间开始出发,然后每隔/后时间触发一次  
- 表示一个时间范围 所有时间域

不确定的值,因为月中日,和型其中日可能冲突,所以用?

0 0 0 1 * * 每天都触发

0 0 0 1 * ? 每月1号触发

只在dayOfMonth 和dayOfWeek使用
L 表示最后,如果在星期域上使用5L表示最后一个周四触发 只在dayOfMonth 和dayOfWeek使用
W 表示工作日,周一到周五,如果dayOfMonth写的是6w,假如6日是工作日则触发,如果6日是周六则在5日(周五触发),如果6日是周日,则7日触发(周一) 只在dayOfMonth使用
LW 表示一个月的最后一个工作日(周五) 只在dayOfMonth使用
# 用于确定每个月的第几个星期几,例如4#2 表示某月的第二个星期三 只在dayOfMonth使用

 

 

      在工作中发现springboot 使用springtask 特别简单,但是发现他的时间域只有6个,不存在年的时间域,也就是意味着使用spring task的话不能指定时间触发一次这种定时任务。

     quartz:

      quartz有几个核心的概念:scheduler,tri

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值