• SpringBoot(十四)_springboot使用内置定时任务Scheduled的使用(一)


    为什么使用定时?

    日常工作中,经常会用到定时任务,比如各种统计,并不要求实时性。此时可以通过提前设置定时任务先把数据跑出来,后续处理起来更方便. 本篇文章主要介绍 springboot内置定时任务。

    实战演示

    1、pom文件

    pom 包里面只需要引入 Spring Boot Starter 包即可,Spring Boot Starter 包中已经内置了定时的方法。我这里方便演示,增加了lombok

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.16.20</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    

    2、启动类开启定时

    @SpringBootApplication
    @EnableScheduling
    public class ScheduledApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ScheduledApplication.class, args);
        }
    }
    

    3、创建定时任务实现类

    这里并没有直接在类中写cron语句,而是写到了配置文件中。一般实际项目中这样写。

    3.1、ScheduledTask 类
    /**
     * @author: curry
     * @Date: 2018/10/10
     */
    @Component
    @Slf4j
    public class ScheduledTask {
        @Scheduled(cron = "${job.schedule}")
        private void process1() {
            log.info("start");
        }
    
    }
    
    3.2 application.properties
    job.schedule = */5 * * * * ? 
    

    4、执行结果

    2018-10-10 22:48:55.001  [pool-1-thread-1] demo.ScheduledTask     : start
    2018-10-10 22:49:00.001  [pool-1-thread-1] demo.ScheduledTask     : start
    2018-10-10 22:49:05.001  [pool-1-thread-1] demo.ScheduledTask     : start
    2018-10-10 22:49:10.001  [pool-1-thread-1] demo.ScheduledTask     : start
    2018-10-10 22:49:15.001  [pool-1-thread-1] demo.ScheduledTask     : start
    

    corn 语法说明

    cron 每位的含义

    cron 一共有 7 位,最后一位是年,Spring Boot 定时方案中只需要设置 6 位即可:

    - 第一位,表示秒,取值 0-59;
    - 第二位,表示分,取值 0-59;
    - 第三位,表示小时,取值 0-23;
    - 第四位,日期天/日,取值 1-31;
    - 第五位,日期月份,取值 1-12;
    - 第六位,星期,取值 1-7,星期一、星期二…;
    注:不是第1周、第2周的意思,另外:1表示星期天,2表示星期一。
    - 第七位,年份,可以留空,取值 1970-2099。
    

    cron 符号含义

    (*)星号:可以理解为每的意思,每秒、每分、每天、每月、每年……。
    (?)问号:问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天 12 点执行,所以第六位星期的位置是不需要关注的,就是不确定的值。同时,日期和星期是两个相互排斥的元素,通过问号来表明不指定值。
    (-)减号:表达一个范围,如在小时字段中使用“10-12”,则表示从 10~12 点,即 10、11、12。
    (,)逗号:表达一个列表值,如在星期字段中使用“1,2,4”,则表示星期天、星期一、星期三。
    (/)斜杠:如 x/y,x 是开始值,y 是步长,比如在第一位(秒) 0/15 就是,从 0 秒开始,每 15 秒,最后就是 0、15、30、45、60,另 */y,等同于 0/y。
    
    

    举个栗子

    0 0 1 * * ?     每天 1 点执行。
    0 5 1 * * ?     每天 1 点 5 分执行。
    0-5 * * * * ?   每分钟的0/1/2/3/4/5 秒执行
    0 5/10 1 * * ?  每天 1 点的 5 分、15 分、25 分、35 分、45 分、55 分这几个时间点执行。
    0 5 1 ? * 1     每周星期天,1点5分 执行,注:1 表示星期天。  
    0 10 3 ? * 1#3  每个月的第 三 个星期,星期天执行,# 号只能出现在星期的位置。
    
    

    fixedRate 说明

    这个日常工作中很少用到,这里不做详细介绍

    @Scheduled(fixedRate = 6000) :上一次开始执行时间点之后 6 秒再执行。
    @Scheduled(fixedDelay = 6000) :上一次执行完毕时间点之后 6 秒再执行。
    @Scheduled(initialDelay=1000, fixedRate=6000) :第一次延迟 1 秒后执行,之后按 fixedRate 的规则每 6 秒执行一次。
    
    

    总结

    其实,使用内置的定时任务还是很方便的,需要注意的是,它是单线程的。

  • 相关阅读:
    XAF-内置初始化数据 (XPO)
    XAF中多对多关系 (XPO)
    Implement Custom Business Classes and Reference Properties 实现自定义业务类和引用属性(XPO)
    Add a Class from the Business Class Library 从业务类库添加类 (XPO)
    Set a One-to-Many Relationship设置一对多关系 (XPO)
    Define the Data Model and Set the Initial Data 定义数据模型并设置初始数据
    Create an XAF Application 创建一个XAF应用程序
    XAF Architecture XAF架构
    功能区控件样式设置
    开源项目CIIP(企业信息管理系统框架).2018.1.0910版更新介绍-上周工作总结
  • 原文地址:https://www.cnblogs.com/zhenghengbin/p/9769886.html
Copyright © 2020-2023  润新知