奇技指南
近期项目开发中需要发送提醒邮件的功能,即在某个指定日期之前,发送提醒邮件给某人,最后主要通过一个定时扫描的任务来实现的,下面就简单介绍一下如何实现该功能。
本文来自公众号Qtest之道。
java定时任务
JAVA实现定时任务的方法有多种,目前主要的几种实现方式:
1、JDK自带
JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService;
2、Quartz
简单却强大的JAVA作业调度框架;
3、Spring3.0以后自带的task
可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多;
本文主要介绍下第三种方式实现定时任务。Spring 3.0+ 自带的任务调度实现,主要依靠TaskScheduler接口的几个实现类实现,具体实现方法如下:
1Spring配置文件实现
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官方技术公众号
技术干货|一手资讯|精彩活动
空·