java定时任务
背 / 景 / 介 / 绍
近期项目开发中需要发送提醒邮件的功能,即在某个指定日期之前,发送提醒邮件给某人,最后主要通过一个定时扫描的任务来实现的,下面就简单介绍一下如何实现该功能。
定时任务
JAVA实现定时任务的方法有多种,目前主要的几种实现方式:
一、JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService;
二、Quartz :简单却强大的JAVA作业调度框架
三、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)Java 定时任务的几种实现方式_hjl2626的博客-CSDN博客
2)http://www.jb51.net/article/110541.html
转发自 360质量效能