spring-task轻松实现任务调度

392 阅读3分钟
原文链接: mp.weixin.qq.com

奇技指南

近期项目开发中需要发送提醒邮件的功能,即在某个指定日期之前,发送提醒邮件给某人,最后主要通过一个定时扫描的任务来实现的,下面就简单介绍一下如何实现该功能。

本文来自公众号Qtest之道。

java定时任务

JAVA实现定时任务的方法有多种,目前主要的几种实现方式:

1、JDK自带

JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService; 

2、Quartz

简单却强大的JAVA作业调度框架;

3、Spring3.0以后自带的task

可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多;

本文主要介绍下第三种方式实现定时任务。Spring 3.0+ 自带的任务调度实现,主要依靠TaskScheduler接口的几个实现类实现,具体实现方法如下:

1

Spring配置文件实现

2

注解实现

3

代码动态添加

cron表达式的使用方法

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

  • Seconds Minutes Hours DayofMonth Month DayofWeek Year

  • Seconds Minutes Hours DayofMonth Month DayofWeek

每一个域可出现的字符如下:

  • Seconds: 可出现", - * /"四个字符,有效范围为0-59的整数

  • Minutes: 可出现", - * /"四个字符,有效范围为0-59的整数

  • Hours: 可出现", - * /"四个字符,有效范围为0-23的整数

  • DayofMonth: 可出现", - * / ? L W C"八个字符,有效范围为0-31的整数

  • Month: 可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEC

  • DayofWeek: 可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推

  • Year: 可出现", - * /"四个字符,有效范围为1970-2099年

其中,每一个域都使用数字,但还可以出现特殊字符,下面简单介绍几个常用的含义:

*  表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。

只能用在DayofMonth和DayofWeek两个域。

- 表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次。

# 用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。

 总 结 

以上是java中比较简单的实现定时任务的方法,还有其他两种方法可以查看参考文献。此外java的定时任务还有比较复杂的应用,比如动态增加,以及Quartz的集群模式等在学习中,欢迎大家批评指正。

参考文献

1.https://blog.csdn.net/kegumingxin2626/article/details/72854823

2.http://www.jb51.net/article/110541.html

更多测试知识,就在Qtest之道

界世的你当不

只做你的肩膀

 360官方技术公众号 

技术干货|一手资讯|精彩活动

空·