springboot自带的定时任务执行z注解@Scheduled

  • 第一步
  • 第二步
  • 第三步
  • cron表达式介绍
    • 1.cron表达式格式:
    • 2.cron各选项的取值范围及解释:
    • 常用案例:

第一步

SpringBoot项目要想创建定时调度任务,首先需要在其启动器类上面添加注解@EnableScheduling 注解开启功能,自动扫描

@Slf4j
@EnableScheduling //添加此注解,@EnableScheduling 注解开启功能,自动扫描
@SpringBootApplication
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

第二步

创建定制调度任务类注意添加@Configuration

/*** 定时刷新缓存*/
@Slf4j
@Configuration
@PropertySource("classpath:/application.properties")
public class CronTaskForCacheLoad {@Autowiredprivate CacheLoadAndRefresh cacheLoadAndRefresh;@Scheduled(cron = "${cron}") // (秒/分/时/日/月/周/年)public void job1() {log.debug("========定时任务开始刷新缓存=======");try {cacheLoadAndRefresh.refreshCacheMsg();} catch (Exception e) {log.error("缓存刷新异常" + e.getMessage());}}}

第三步

@Sheduled(cron = "${cron}")对应的定时任务表达式可以直接写在代码里,也可以使用此表达式添加到配置文件中
@PropertySource("classpath:/application.properties")配合${cron}读取配置文件中的cron对应的配置值

# 缓存刷新执行频率,6或者7个其中年域是可选的,{秒} {分} {时} {日} {月} {周} {年(可选)}
cron=0 0 0/1 * * ?

cron表达式介绍

SpringTask中cron表达式整理记录

1.cron表达式格式:

{秒} {分} {时} {日} {月} {周} {年(可选)}

2.cron各选项的取值范围及解释:

{秒}:取值范围(0-59),不允许为空值,若值不合法,调度器将抛出SchedulerException异常

{分}:取值范围(0-59),不允许为空值,若值不合法,调度器将抛出SchedulerException异常

{时}:取值范围(0-23),不允许为空值,若值不合法,调度器将抛出SchedulerException异常

" 代表每隔1分/秒/时触发;
“,” 代表在指定的分/秒/时触发,比如"10,20,40"代表10分/秒/时、20分/秒/时和40分/秒/时时触发任务
“-” 代表在指定的范围内触发,比如"5-30"代表从5分/秒/时开始触发到30分/秒/时结束触 发,每隔1分/秒/时触发
“/” 代表触发步进(step),"/“前面的值代表初始值(”
“等同"0”),后面的值代表偏移量,比如"0/25"或者”*/25"代表从0分/秒/时开始,每隔25分/秒/时触发1次,即0分/秒/时触发1次,第25分/秒/时触发1次,第50分/秒/时触发1次;"5/25"代表5分/秒/时触发1次,30分/秒/时触发1次,55分/秒/时触发1次;"10-45/20"代表在[10,45]内步进20分/秒/时命中的时间点触发,即10分/秒/时触发1次,30分/秒/时触发1次
{日}:取值范围(1-31),不允许为空值,若值不合法,调度器将抛出SchedulerException异常

" 代表每天触发;
“?” 与{周}互斥,即意味着若明确指定{周}触发,则表示{日}无意义,以免引起 冲突和混乱;
“,” 代表在指定的日期触发,比如"1,10,20"代表1号、10号和20号这3天触发;
“-” 代表在指定的日期范围内触发,比如"10-15"代表从10号开始触发到15号结束触发,每隔1天触发
“/” 代表触发步进(step),"/“前面的值代表初始值(”
“等同"1”),后面的值代表偏移量,比如"1/5"或者”*/5"代表从1号开始触发,每隔5天触发1次;"10/5"代表从10号开始触发,以后每隔5天触发一次;“1-10/2"表达式意味着在[1,10]范围内,每隔2天触发,即1号,3号,5号,7号,9号触发
“L” 如果{日}占位符如果是"L”,即意味着当月的最后一天触发
"W "意味着在本月内离当天最近的工作日触发,所谓最近工作日,即当天到工作日的前后最短距离,如果当天即为工作日,则距离为0;所谓本月内的说法,就是不能跨月取到最近工作日,即使前/后月份的最后一天/第一天确实满足最近工作日;因此,"LW"则意味着本月的最后一个工作日触发,"W"强烈依赖{月}
“C” 根据日历触发,由于使用较少,暂时不做解释
{月}:取值范围(1-12或JAN-DEC),不允许为空值,若值不合法,调度器将抛出SchedulerException异常
{周}:取值范围(1-7或SUN-SAT),1表示星期天,2表示星期一, 依次类推,不允许为空值,若值不合法,调度器将抛出SchedulerException异常

" 代表每星期都触发;
“?” 与{日}互斥,即意味着若明确指定{日}触发,则表示{周}无意义,以免引起冲突和混乱
“,” 代表在指定的星期约定触发,比如"1,3,5"代表星期天、星期二和星期四触发
“-” 代表在指定的星期范围内触发,比如"2-4"代表从星期一开始触发到星期三结束触发,每隔1天触发
“/” 代表触发步进(step),"/“前面的值代表初始值(”
“等同"1”),后面的值代表偏移量,比如"1/3"或者”*/3"代表从星期天开始触发,每隔3天触发1次;“1-5/2"表达式意味着在[1,5]范围内,每隔2天触发,即星期天、星期二、星期四触发
“L” 如果{周}占位符如果是"L”,即意味着星期的的最后一天触发,即星期六触发,L= 7或者 L = SAT,因此,“5L"意味着一个月的最后一个星期四触发
“#” 用来指定具体的周数,”#“前面代表星期,”#"后面代表本月第几周,比如"2#2"表示本月第二周的星期一,"5#3"表示本月第三周的星期四,因此,“5L"这种形式只不过是”#"的特殊形式而已
“C” 根据日历触发,由于使用较少,暂时不做解释
{年}:取值范围(1970-2099),允许为空值,(非空时)若值不合法,调度器将抛出SchedulerException异常

注:
①.秒、分、时、月、年这5项的占位符以及占位符的使用规则是一致的(只是单位上的区别),日、周中标红的两条需要重点比较!

②.“?”和“L”字符仅被用于{日}和{周}两个子表达式,表示不指定值 。对于“?”的应用,当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”;在{日}表达式中,“L”表示一个月的最后一天,在{周}自表达式中,“L”表示一个星期的最后一天。如果在“L”前有具体的内容,它就具有其他的含义了。例如:“6L”表示这个月的倒数第6天,“FRIL”表示这个月的最一个星期五 。

③.在使用“L”参数时,不要指定列表或范围,因为这会导致问题

常用案例:

“0 0 10,14,16 * * ?” 每天上午10点,下午2点,4点
“0 0/30 9-17 * * ?” 朝九晚五工作时间内每半小时
“0 0 12 ? * WED” 表示每个星期三中午12点
“0 0 12 * * ?” 每天中午12点触发
“0 15 10 ? * *” 每天上午10:15触发
“0 15 10 * * ?” 每天上午10:15触发
“0 15 10 * * ? *” 每天上午10:15触发
“0 15 10 * * ? 2005” 2005年的每天上午10:15触发
“0 * 14 * * ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 * * ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 * * ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 * * ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15 * ?” 每月15日上午10:15触发
“0 15 10 L * ?” 每月最后一日的上午10:15触发
“0 15 10 ? * 6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ? * 6#3” 每月的第三个星期五上午10:15触发
“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
“30 10 1 20 * ?” 每月20号1点10分30秒触发任务
“30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务
“30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务
“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务
“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务
“15-45 * * * * ?” 15到45秒内,每秒都触发任务
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务
“0 0 0 * * ?” 每天晚上12点触发任务

springboot自带定时任务@Sheduled使用FAQ相关推荐

  1. springboot自带定时器实现定时任务的开启关闭以及定时时间可以配置

    一.序言: 最近项目需要用到定时任务,需要完成一个定时功能.经过了解,项目中目前实现定时任务,一般有三种选择,一是用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(ti ...

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

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

  3. SpringBoot实现动态定时任务

    项目情况: 在当前项目中需要一个定时任务来清除过期的校验码,如果使用数据库存储过程的话不方便维护.因此采用SpringBoot自带的方式来设置定时任务. 技术说明: SpringBoot自带的方式有两 ...

  4. java 定时任务怎么关闭_浅谈springboot项目中定时任务如何优雅退出

    在一个springboot项目中需要跑定时任务处理批数据时,突然有个Kill命令或者一个Ctrl+C的命令,此时我们需要当批数据处理完毕后才允许定时任务关闭,也就是当定时任务结束时才允许Kill命令生 ...

  5. SpringBoot监控服务器信息以及SpringBoot自带Health Indicator

    SpringBoot监控服务器内存信息简介 /** * 定时任务监控服务器内存信息 */ @Component public class OsMonitorScheduleTask implement ...

  6. SpringBoot与Shedule定时任务

    一.问题描述 1.   springBoot中的@Schedule注解定时任务,在某些情况下并没有生效,定时任务不再执行,进而导致业务出现问题. 二.分析定位 1.  首先查看百度有没有相关的问题,查 ...

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

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

  8. 置springboot自带tomcat的最大连接数和最大并发数

    设置springboot自带tomcat的最大连接数和最大并发数 从源代码来看,最大连接数和最大并发数默认是10000和200 可以通过工程下的application.yml配置文件来改变这个值 se ...

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

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

最新文章

  1. python列表元素赋值_如何在python中的列表列表的所有元素上执行“一行”赋值
  2. python requests post 中文乱码问题
  3. LOJ 2546 「JSOI2018」潜入行动——树形DP
  4. 【开源项目】保存YUV420数据到本地
  5. 国产自主可控的形式化验证代码自动生成工具ModelCoder可替代Matlab/Sumlink
  6. VM虚拟机中Linux扩展磁盘空间的方法
  7. 云计算的SPI服务模型
  8. mysql主从复制浅析(一)
  9. GPS卫星星历与历书
  10. Speedoffice(excel)如何运用公式通过身份证号码提取出性别
  11. React脚手架开发
  12. Cox模型中的变量选择(1)---自适应Lasso方法
  13. Oracle Newsletter闪亮人物推介--Joel Perez
  14. 微课 展示 php 源码,PHP从零基础到项目实战(微课视频版)
  15. 如何用Python从海量文本抽取主题?【转载:王树义】
  16. Flash 的fla文件读写 可以直接更改图片路径
  17. 半导体术语的中英文版本
  18. 安徽大学大学生创新项目报销流程
  19. linux下C++基本库的Hollo World程序
  20. 2019.04.20【NOIP提高组】模拟 B 组 观察题目+堆(?)+最大匹配+贪心、DP

热门文章

  1. 重庆市区块链产业创新基地已入驻40余家企业
  2. 在mac上安装gradle(超详细,直接按步骤操作即可轻松搞定)
  3. InnoDB Cluster详解
  4. zsh: command not found: telnet 如何解决
  5. GNSS增强定位技术发展与星地融合应用
  6. es6之数组的flat(),flatMap()
  7. 编一程序,输入月份,输出该月份的英文名。
  8. PS ,PR,等Adobe软件哪里可以下载?
  9. Linux内核IOREMAP驱动
  10. R语言使用plot函数可视化数据散点图,使用cex.sub参数自定义设置次标题的字体大小(subtitle)