当前位置:   article > 正文

SpringBoot定时任务_springboot 定时任务

springboot 定时任务

1.定时器

定时任务,在企业开发中尤其重要,很多业务都需要定时任务去完成。例如10点开售某件商品,凌晨0点统计注册人数,一级统计其他各种信息等;

这时候不可能人为的去开启某个开关或者人为的统计某些数据,如果这样,估计执行任务者都要崩溃了。

(一)SpringBoot定时器的使用一般有以下几种实现方式

1.Timer:

这是Java自带的java.util.Timer类,这个类允许调度一个java.util.TimerTask任务。使用这种方式可以让程序按照某一个频率执行,

但不能在指定时间运行,一般用的很少。

2.ScheduledExecutorService:

也jdk自带的一个类,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是任务是并发执行的,

他们之间互不影响。

3.SpringTask:

Spring 3.0以后自带的Task,可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单多了

4.Quartz:

这是一个功能比较强大的调度器,可以让程序在指定的时间执行,也可以按照某一个频率执行,配置起来稍显复杂。

简单的定时任务可以直接通过Spring自带的task来实现,

复杂的定时任务则可以通过集成Quartz来实现


2.Task

Task是Spring自带的定时器,使用方便简单。使用方式如下。

1.创建工程

首先创建一个Spring Boot Web工程项目

2.开启定时任务

在启动类添加@EnableScheduling注解,开启对定时任务的支持

  1. @SpringBootApplication
  2. @EnableScheduling
  3. public class JwtDemoApplication {
  4.    public static void main(String[] args) {
  5.        SpringApplication.run(JwtDemoApplication.class, args);
  6.   }
  7. }

3.设置定时任务

定时任务要通过@Scheduled注解来实现

  1. package com.frank.component;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.scheduling.annotation.Scheduled;
  5. import org.springframework.stereotype.Component;
  6. import java.util.Date;
  7. @Component
  8. public class ScheduledTask {
  9.    private Logger logger= LoggerFactory.getLogger(ScheduledTask.class);
  10.    @Scheduled(cron = "0 0/1 * * * ?")
  11.    public void testOne(){
  12.        logger.info("每分钟执行一次");
  13.   }
  14.    @Scheduled(fixedDelay = 30000)
  15.    public void testTwo(){
  16.        logger.info("每30秒执行一次");
  17.   }
  18.    @Scheduled(cron = "0 0 1 * * ?")//每天凌晨1点执行
  19.    public void initTask(){
  20.        //执行任务
  21.        logger.info("执行任务"+new Date());
  22.   }
  23. }

配置完成后,启动SpringBoot项目,观察控制台日志打印信息

 

3.表达式说明

字段允许值允许的特殊字符
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表达式对特殊字符的大小写不敏感,对代表星期的缩写英文大小写也不 敏感。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/728151
推荐阅读
相关标签
  

闽ICP备14008679号