赞
踩
定时任务,在企业开发中尤其重要,很多业务都需要定时任务去完成。例如10点开售某件商品,凌晨0点统计注册人数,一级统计其他各种信息等;
这时候不可能人为的去开启某个开关或者人为的统计某些数据,如果这样,估计执行任务者都要崩溃了。
1.Timer:
这是Java自带的java.util.Timer类,这个类允许调度一个java.util.TimerTask任务。使用这种方式可以让程序按照某一个频率执行,
但不能在指定时间运行,一般用的很少。
也jdk自带的一个类,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是任务是并发执行的,
他们之间互不影响。
3.SpringTask:
Spring 3.0以后自带的Task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单多了
4.Quartz:
这是一个功能比较强大的调度器,可以让程序在指定的时间执行,也可以按照某一个频率执行,配置起来稍显复杂。
Task是Spring自带的定时器,使用方便简单。使用方式如下。
首先创建一个Spring Boot Web工程项目
在启动类添加@EnableScheduling注解,开启对定时任务的支持
- @SpringBootApplication
- @EnableScheduling
- public class JwtDemoApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(JwtDemoApplication.class, args);
- }
-
- }
定时任务要通过@Scheduled注解来实现
- package com.frank.component;
-
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
-
- import java.util.Date;
-
-
- @Component
- public class ScheduledTask {
-
- private Logger logger= LoggerFactory.getLogger(ScheduledTask.class);
-
- @Scheduled(cron = "0 0/1 * * * ?")
- public void testOne(){
- logger.info("每分钟执行一次");
- }
-
- @Scheduled(fixedDelay = 30000)
- public void testTwo(){
- logger.info("每30秒执行一次");
- }
-
- @Scheduled(cron = "0 0 1 * * ?")//每天凌晨1点执行
- public void initTask(){
- //执行任务
- logger.info("执行任务"+new Date());
- }
-
- }
配置完成后,启动SpringBoot项目,观察控制台日志打印信息
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小时 | 0-23 | , - * / |
日期 | 1-31 | , - * / L W C |
月份 | 1-12或者JAN-DEC | , - * / |
星期 | 1-7或者SUN-SAT | , - * /L C # |
年(可选) | 留空,1970-2099 | , - * / |
工三的表达式所示:
(1) “*“字符被用来指定所有的值。如:“、”在分钟的字段域里表示“每分钟”
2)“-”字符被用来指定一个范围。如:“10-12”在小时域里表示“10点,11点、12点”
(3)“,”字符被用来指定另外的值。如:“MON,WED,FRI在星期域里表示“星期一星期三、星期五”
(4) “?”字符只在日期城和星期城中使用。它被用来指定“非明确的值”。当需要通过在这两个域中的一个来指定某日期或星期几的时候,它是有用的。看一看下面所举的例子 就会明白。
(5)“L”字符指定在月或者星期中的某天(最后一天)。即“Las”的缩写。但是在星期和月中“L”表示不同的意思,如:在月子段中“L”指月份的最后一天,例如1月31日和2月 28日,如果在星期字段中则简单地表示为“7”或者“SAT”。 值的后面,则表示“某月的最后一个星期value” ,如“6L.”表示某月的最后一个星期五。 如果在星期字段中在某个value
(6)“W”字符只能用在月份字段中,该字段指定了离指定日期最近的那个星期日
(7)“#”字符只能用在星期字段,该字段指定了第几个星期 value 在某月中。每一个元素都可以显式地规定一个值(如6),一个区间(如9~12),一个列表(如9,1113)或一个通配符(如)。 “月份中的日期”和“星期中的日期”这两个元素是互斥的,因此应该通过设置一个问号(?)来表明不想设置的那个字段。
注意:Cron表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不 敏感。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。