定时任务——Cron表达式

/ Cron表达式 / 0 条评论 / 3039浏览

引言

在web开发过程中,经常我们会有这样的需求:定时对数据库进行数据更新、设置任务提醒等等。要实现这样的定时任务,就需要使用listener做定时器,原生实现之前有玩过,过程比较复杂(感兴趣的下伙伴可以去学习一下),自从用了Spring框架之后有更方便的实现,那就是Cron表达式,今天就简单介绍一下Cron表达式在Springboot中的使用方法和它的基本语法。

Cron结构

Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:

  1. Seconds Minutes Hours DayofMonth Month DayofWeek Year
  2. Seconds Minutes Hours DayofMonth Month DayofWeek

Cron字段符号

字段含义

https://vr360-beifengtz.oss-cn-beijing.aliyuncs.com/beifeng-blog/article/20181211003758.png

符号含义

  1. * 表示匹配该域的所有值。在分钟里表示每一分钟触发。在小时,日期,月份等里面表示每一小时,每一日,每一月。
  2. 只能用在DayofMonth和DayofWeek两个域。表示不指定值。表示不关心当前位置设置的值。 比如不关心是周几,则周的位置填写?
  3. - 表示范围。例如小时设置为10-12表示10,11,12点均会触发。
  4. , 表示多个值。例如小时设置11,12表示11和12点均会触发。
  5. / 表示递增触发。例如在秒处设置5/20表示的是从5秒开始每隔20秒触发一次。
  6. L 表示最后,只能出现在DayofWeek和DayofMonth域。例如在星期里设置5L表示的是最后的一个星期四触发(注:一周是以星期天为第一天),如果直接设置为L,表示最后一周的最后一天触发。
  7. W 表示离指定日期最近的工作日(周一到周五)触发,只能出现在DayofMonth域。例如13W表示的是离13号最近的一个工作日触发
  8. # 表示的是每个月的第几个星期几,只能出现在DayofMonth域。例如4#2表示的是某月的第二个星期三(4表示星期三,一周从周天开始计算)

常用Cron表达式

这里记录一个在线生成Cron表达式的网站http://cron.qqe2.com/

Springboot中使用Cron表达式

首先需要在启动类出加一个注解,允许解析Cron

@EnableScheduling

然后我们只需要在需要定期执行的方法上加上@Scheduled直接就可以了

例如:

/**
 * @Author beifengtz
 * @Site www.beifengtz.com
 * @Date Created in 23:31 2018/12/10
 * @Description:
 */
@Component
public class CronTest {

    /**
     * 打印测试
     * 每隔一秒触发一次
     */
    @Scheduled(cron = "0/1 * * * * ? ")
    public void testPrint(){
        System.out.println("函数被触发了,时间:"+new Date().toString());
    }
}

测试结果

函数被触发了,时间:Tue Dec 11 00:23:15 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:16 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:17 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:18 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:19 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:20 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:21 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:22 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:23 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:24 CST 2018
函数被触发了,时间:Tue Dec 11 00:23:25 CST 2018

如果应用到实际项目中,比如定期更新数据、用户定时任务、定期清理垃圾文件等等都可以用到Cron表达式。

微信公众号浏览体验更佳,在这里还有更多优秀文章为你奉上,快来关注吧!

北风IT之路