为什么使用定时?

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

总结

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

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

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

    springboot(十四):springboot整合shiro-登录认证和权限管理 .embody{ padding:10px 10px 10px; margin:0 -20px; border-b ...

  2. springboot - 应用实践(N)使用springboot内置的@Scheduled

    1.springboot开箱即用,内置调度任务的使用. 建一个简单的springboot工程,pom.xml: <?xml version="1.0" encoding=&q ...

  3. SpringBoot怎么自动部署到内置的Tomcat的?

    先看看SpringBoot的主配置类的main方法: main方法运行了一个run()方法,进去run方法看一下: /** * 静态帮助程序,可用于从中运行{@link SpringApplicati ...

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

    这篇文章我们来学习如何使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求.在Java领域一般有Spring Security ...

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

    将68个内置函数按照其功能分为了10类,分别是: 数学运算(7个) abs()   divmod()  max()  min()  pow()  round()  sum() 类型转换(24个) bo ...

  6. Py修行路 python基础 (十八) 反射 内置attr 包装

    一.isinstance 和 issubclass1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象.2.issubclass(sub, super)检查sub类是否是 ...

  7. python学习笔记(四):生成器、内置函数、json

    一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...

  8. springboot学习笔记:6.内置tomcat启动和外部tomcat部署总结

    springboot的web项目的启动主要分为: 一.使用内置tomcat启动 启动方式: 1.IDEA中main函数启动 2.mvn springboot-run 命令 3.java -jar XX ...

  9. 四、mysql内置函数

    .字符串函数 concat('a','b'); 字符串拼接函数 ,,"我是A我是B"): 从指定位置开始替换指定长度的指定数据(起步为1) lower() 转小写 upper() ...

随机推荐

  1. 2018-2019-2 20175308实验一 《Java开发环境的熟悉》实验报告

    2018-2019-2-20175308 实验一 <Java开发环境的熟悉>实验报告 一.实验内容及步骤 (一)使用JDk编译.运行简单的Java程序 输入cd Code命令进入Code目 ...

  2. C++之构造函数拷贝

    拷贝构造函数,顾名思义,就是通过拷贝对象的方式创建一个新对象.拷贝构造函数有两种原型(我们继续以book类来说明拷贝构造函数原型): book(book &b); book(const boo ...

  3. Theano3.7-练习之堆叠消噪自动编码器

    来自:http://deeplearning.net/tutorial/SdA.html#sda Stacked Denoising Autoencoders (SdA) note:这部分需要读者读过 ...

  4. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结

    1. 前言 bxCAN是STM32系列最稳定的IP核之一,无论有哪个新型号出来,这个IP核基本未变,可见这个IP核的设计是相当成熟的.本文所讲述的内容属于这个IP核的一部分,掌握了本文所讲内容,就可以 ...

  5. Spring Data JPA、MyBatis还有Hibernate有什么区别

    原文:https://www.imooc.com/article/19754?block_id=tuijian_wz Spring Data JPA.MyBatis还有Hibernate有什么区别 2 ...

  6. 20155236范晨歌_Web安全基础实践

    20155236范晨歌_Web安全基础实践 目录 实践目标 WebGoat BurpSuite Injection Flaws Cross-Site Scripting (XSS) 总结 实践目标 ( ...

  7. 2017-2018-2 20155315《网络对抗技术》Exp8 :Web基础

    实验目的 理解HTML,学会Web前端.Web后端和数据库编程及SQL注入.XSS攻击测试 教程 实验内容 操作程序规律 运行脚本或可执行文件 查看配置文件 出错找日志 Web前端HTML 能正常安装 ...

  8. .NetCore利用BlockingCollection实现简易消息队列

    前言 消息队列现今的应用场景越来越大,常用的有RabbmitMQ和KafKa. 我们用BlockingCollection来实现简单的消息队列. 实现消息队列 用Vs2017创建一个控制台应用程序.创 ...

  9. 从字节码层面,解析 Java 布尔型的实现原理

    最近在系统回顾学习 Java 虚拟机方面的知识,其中想到一个很有意思的问题:布尔型在虚拟机中到底是什么类型? 要想解答这个问题,我们看 JDK 的源码是无法解决源码的,我们必须深入到 class 文件 ...

  10. C#用Infragistics 导入导出Excel(一)

    最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...