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

为什么使用定时?

日常工作中,经常会用到定时任务,比如各种统计,并不要求实时性。此时可以通过提前设置定时任务先把数据跑出来,后续处理起来更方便. 本篇文章主要介绍 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 秒执行一次。

总结

其实,使用内置的定时任务还是很方便的,但是,如果复杂的情况一般使用Quartz 。大家工作中一般都会见过这个东西。下篇文章一块学习一下这个东西。

原文地址:https://www.cnblogs.com/zhenghengbin/p/9769886.html

时间: 2024-10-10 06:52:06

SpringBoot(十四)_springboot使用内置定时任务的使用的相关文章

《Javascript权威指南》学习笔记之十四:JavaScript内建类

前面的几篇博文分别介绍了对象.字符串.数组.日期等内建类,本篇将介绍Boolean/Math/Function/Arguments类 一.使用Boolean类处理逻辑值 Boolean类是JS的一个封装类,可以用于获取Boolean对象的原始数据类型或者字符串表示形式.new Boolean(value)用于创建一个Boolean对象,Boolean(value)它的参数转换成一个原始的布尔值,并且返回这个值.Boolean对象只有两个值:true或者false. value参数可以省略.如果省

vue2.0学习(四)-实例和内置组件

vue2.0学习(四)-实例和内置组件 1.实例入门-实例属性 一.Vue和Jquery.js一起使用 下载可以去官网进行下载,我这里使用的版本是3.1.1,下载好后在需要的页面引入就可以了.当然你还有很多其它的方法引入jquery,只要可以顺利引入就可以了. <script type="text/javascript" src="../assets/js/jquery-3.1.1.min.js"></script> <!DOCTYPE

JSP第四课:内置对象使用

相关知识: (1)内置对象 一.request使用 实例1:简单登陆界面获取信息 实例2:获取多值信息,如爱好 实例3:实现跳转,获取对象信息 二.实现用户登录 (1)获取登陆信息 (2)信息校验处理 (3)不同页显示登录信息 三.实现用户留言 用户留言实现:实现含主框架的用户留言,显示信息也是含有主框架 (1)message.html <script type="text/javascript">var s="1234567"; function ch

SpringBoot(十四):springboot整合shiro-登录认证和权限管理

原文出处: 纯洁的微笑 这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security.Apache Shiro等安全框架,但是由于Spring Security过于庞大和复杂,大多数公司会选择Apache Shiro来使用,这篇文章会先介绍一下Apache Shiro,在结合Spring Boot给出使用案例. Apache Shiro What is Ap

Python小白学习之路(十六)—【内置函数一】

将68个内置函数按照其功能分为了10类,分别是: 数学运算(7个) abs()   divmod()  max()  min()  pow()  round()  sum() 类型转换(24个) bool()  int()  float()  complex()  str()  bytearray() bytes() memoryview() ord() chr() bin() oct() hex() tuple() list() dict() set() frozenset( ) enumer

python基础篇【第四篇】内置函数、装饰器:

一.内置函数: 对于一些python中常用的函数,python自身就已经定义了一些函数用于调用,我们就叫它内置函数!如以下都是python中内置的函数! 一些常用的内置函数具体用法: 一些常用的内置函数具体用法: 1.abs():取绝对值 1 n=abs(-2) 2 print(n) 3 4 结果: 5 2 2.all();传入可迭代的对象中,都为真才为真; Fasle: 0,None,"",[],{} ,()都为假True: 1,-1,True,有值返回真. n=all([1,2,3

莫烦scikit-learn学习自修第四天【内置训练数据集】

1. 代码实战 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from sklearn import datasets from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt # 从内置训练数据集中加载房价数据 loaded_data = datasets.load_boston() data_X = loaded_data.data data_

python第十八课——常用内置函数

常用内置函数:round(): print(round(3.14),round(3.99)) print(round(3145.926,-2),round(413.575,2)) abs(): print(abs(-2),abs(-1),abs(0),abs(1),abs(2)) max().min().sum() print(max([1,2,3,4,5])) print(min([1,2,3,4,5])) print(sum([1,2,3,4,5])) 以下比较的是字符串中每个字符的asci

Shell脚本编程概述(四):bash内置字符处理工具

一.字符串切片: ${var:offset:number}  取字符串的子串: 取字符趾的最右侧的几个字符:${var:  -length} 注意:冒号后必须有一个空白字符: 二.基于模式取子串: 1.${var#*word} word是指定的分隔符: 自左而右查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符间所有字符 2.${var##*word} 自左而右查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符间所有字符 3.