接下来我们有定时任务,比如每天来收集和分析日志,比如每个月来汇总日志,生成报表等等等等,Spring也支持了非常简便的任务支持,我们只需要两个注解,第一个开启定时任务,第二个给我们需要定时的任务方法加上@Schedule注解,然后写上Cron表达式即可,我们来测试一下

我在这创建一个Service,叫ScheduleService,把它加载在容器中,假设他有一个方法,这个方法我们需要定时执行,我们只需要给hello上加上@Scheduled注解,这个注解里面有非常多的属性,最重要的Cron/*** A cron-like expression, extending the usual UN*X definition to include* triggers on the second as well as minute, hour, day of month, month* and day of week.  e.g. {@code "0 * * * * MON-FRI"} means once per minute on* weekdays (at the top of the minute - the 0th second).* @return an expression that can be parsed to a cron schedule* @see org.springframework.scheduling.support.CronSequenceGenerator*/
String cron() default "";来指定Cron表达式,这个表达式怎么写呢,这一块有提示,我们这个表达式包括有秒,和分,时,还有每一月的某一天,有月份,还有每周的哪一天,就有这么几个值,把它复制过来,秒,分,时,日,月,还有咱们的周,所以我们来写表达式的话呢,按照这个表达式来写,还有一个示例我们拿过来,这个例子,表达式总共6位,每位用空格分割,分割的分别代表哪一秒,还有分,哪一分钟,时,几点,还有日,是我们每个月的多少号,还有我们的这个月,和周,代表是周几,那么我们就来写上一个表达式,这个表达式代表的意思是,0 * * * * MON-FRI,周一到周五,MON-FRI,*代表任意时刻,不管是哪一月,哪一日,哪一个小时,哪一个分钟,但是整秒启动,意思周一到周五,每一分钟都启动一次,他这个是整秒启动,如果0再改为*,我们一定要开启自动任务功能,@EnableScheduling,开启基于注解的定时任务,把它加上以后我们来重启一下这个应用,看一下控制台是否会有打印
package com.learn.service;import java.util.Date;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;@Service
public class ScheduleService {/*** second(秒), minute(分),hour(时),day of month(日),month(月), day of week(周几)* 0 * * * * MON-FRI*/@Scheduled(cron="* * * * * *")//@Scheduled(cron="0,1,2,3,4 * * * * MON-SAT")//@Scheduled(cron="0-4 * * * * MON-SAT")// 每4秒执行一次
//  @Scheduled(cron="0/4 * * * * MON-SAT")public void hello() {System.out.println("hello...."+new Date());
//      System.out.println(new Date());}
}
package com.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;// 开启异步注解功能
@EnableAsync
@EnableScheduling
@SpringBootApplication
public class SpringBootTaskApplication {public static void main(String[] args) {// Spring应用启动起来SpringApplication.run(SpringBootTaskApplication.class,args);}}
除了写精确值,还取这些特殊字符,这个*号我们刚才见过了,关键就是这些特殊字符,逗号代表枚举,所谓的枚举,就是要列出我们的时间点,我在这把表达式换一下,我把这些都尝试一下,这个秒我来列举上"0,1,2,3,4",5秒的时间,这5秒都会来启动,剩下我都不变,周一到周六,不管是哪一天,哪一个小时,哪一分钟,0,1,2,3,4这几秒都会运行一次,我们来观察一下,这是我们第一个叫枚举,还有我们第二种办法,斜杠就是步长,步长就是每隔多长时间执行一次,0/4代表从0秒启动,每4秒执行一次,我们来尝试一下,我们来启动,?是来进行冲突匹配的,星期这一块的写法,你可以写英文,SUN-SAT,代表周日到周六,或者你来写数字,而数字你可以写0-7,1-6代表周一到周六,0和7都能代表周日,这个和以前的调度框架Quartz有点不一样,这个Quartz是1到7,1代表周日,2代表周一,而我们这个是0跟7都是周日,1-6是周一到周六,大家注意一下,还有我们能写的表达式,比如字母L代表最后,W代表工作日,C是和我们JAVA的Calendar类来进行计算,而#号代表第几个,比如4#2的意思,就是第二个,第二个星期四,我就不一个一个尝试了,我在这里给大家写了一些表达式,大家能读懂就行了

SpringBoot高级-任务-定时任务相关推荐

  1. SpringBoot高级特性

    SpringBoot高级特性 SpringBoot缓存 基本环境搭建 导入数据库文件,创建出 department 和 employee 数据表 创建 JavaBean 封装数据 整合 Mybatis ...

  2. SpringBoot下使用定时任务的方式全揭秘

    本文旨在用通俗的语言讲述枯燥的知识 定时任务作为一种系统调度工具,在一些需要有定时作业的系统中应用广泛,如每逢某个时间点统计数据.在将来某个时刻执行某些动作-定时任务在主流开发语言均提供相应的API供 ...

  3. 第四十章:基于SpringBoot Quartz完成定时任务分布式多节点负载持久化

    在上一章[第三十九章:基于SpringBoot & Quartz完成定时任务分布式单节点持久化]中我们已经完成了任务的持久化,当我们创建一个任务时任务会被quartz定时任务框架自动持久化到数 ...

  4. springboot高级——消息队列相关

    写在前边:本文学习尚硅谷的springboot高级整理笔记. 消息队列是什么,有什么好处? 我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用.消息队列是分布式 ...

  5. SpringBoot中的定时任务的同步与异步

    SpringBoot中的定时任务的同步与异步你确定真的知道? 授人以渔 Java领域;架构知识;面试心得;互联网行业最新资讯 定时任务调度功能在我们的开发中是非常常见的,随便举几个例子:定时清除一些过 ...

  6. 【SpringBoot高级篇】springboot实现上传docdocx文件格式转html在线预览v2.0

    [SpringBoot高级篇]springboot实现上传doc&docx文件格式转html在线预览v2.0 pom 上传路径工具类 SpringMvc虚拟路径映射 doc转html工具类 d ...

  7. Springboot中上一个定时任务没执行完,是否会影响下一个定时任务执行分析及结论

    本文将用测试代码验证:定时任务阻塞问题. 在springboot中使用定时任务的步骤 在启动类上加上注解:@EnableScheduling,表示允许定时任务执行 定时任务需要在类上加上@Compon ...

  8. 【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎

    [SpringBoot高级篇]SpringBoot集成Elasticsearch搜索引擎 1. 什么是Elasticsearch? 2. 安装并运行Elasticsearch 2.1 拉取镜像 2.2 ...

  9. Springboot集成quartz定时任务可视化配置​​​​​​​

    转自我的个人博客:Springboot集成quartz定时任务可视化配置 使用quartz定时任务已经有一段时间了,今天记录一下Springboot 2.x集成Quartz. 1.引入quartz j ...

最新文章

  1. 9.可变参数创建不可变集合
  2. spring事件驱动模型--观察者模式在spring中的应用
  3. datagridview当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。
  4. PMCAFF微课堂|前codefollow运营女神:深剖女性社群电商的心理需求和特征
  5. iOS 搜狗输入法键盘唤不出的解决办法
  6. Windows2003使用WEB方式修改域用户密码
  7. mxnet基础到提高(10)--读写文件
  8. 从电商用户触点看服务设计趋势
  9. 交换机配置软件_交换机常见故障分类与排除方法
  10. Linux gitpush错误,linux – GIT:无法推送(奇怪的配置问题)
  11. 使用Python-Flask框架开发Web网站系列课程(一)构建项目
  12. warning:deprecated conversion from string constant to 'char *' 解决方案
  13. Go 语言基础(三)——基本数据类型
  14. 空间数据引擎oracle_空间数据库oracle
  15. ThinkPHP源码学习之一
  16. mac m1 php,【php】Macbook m1 Big Sur 安装php7.1 mondodb 折腾记
  17. 18. Magento 细节
  18. python lambda菜鸟教程_Python - lambda函数
  19. AT32F407/437 LWIP FreeRTOS Multicast
  20. python全栈开发第一天(HTML认识,HTML常用标签)

热门文章

  1. Jdk1.8新特性(二)——lambda表达式(参数列表)-{}和函数式接口@FunctionalInterface
  2. Python Web框架学习【Flask】
  3. 现代中小企业IT基础平台建设 - 完整案例实战(00_序)
  4. 浅谈对JavaScript闭包的理解
  5. django如何给上传的图片重命名(给上传文件重命名)
  6. Hangfire 任务调度
  7. Linux01-Linux文本编辑器vim编辑器深入详解22
  8. linux如何映射Windows下的磁盘为网络盘
  9. TCP协议属性设置之SO_LINGER属性
  10. Anthem库的Google Suggest 实现