SpringBoot 定时任务踩坑记录

Stella981
• 阅读 481

来源:

https://blog.csdn.net/weixin\_40582024/article/details/78517182

SpringBoot 定时任务踩坑记录

前言

springboot已经支持了定时任务Schedule模块,一般情况已经完全能够满足我们的实际需求。今天就记录一下我使用 schedule 时候踩的坑吧。

想要使用定时,我们首先要开启支持,其实就是在启动类上面加个注解就 Ok。

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

这篇博客的主题是记录踩的坑,具体定时任务怎么使用我就不写了

今天踩的这个坑和 cron 表达式有关,我们就先来看看 cron 表达式的解释吧:
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义

解释

* 第一位,表示秒,取值0-59* 第二位,表示分,取值0-59* 第三位,表示小时,取值0-23* 第四位,日期天/日,取值1-31* 第五位,日期月份,取值1-12* 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思          另外:1表示星期天,2表示星期一。* 第7为,年份,可以留空,取值1970-2099(*)星号:可以理解为每的意思,每秒,每分,每天,每月,每年...(?)问号:问号只能出现在日期和星期这两个位置,表示这个位置的值不确定,每天3点执行,所以第六位星期的位置,我们是不需要关注的,就是不确定的值。同时:日期和星期是两个相互排斥的元素,通过问号来表明不指定值。比如,1月10日,比如是星期1,如果在星期的位置是另指定星期二,就前后冲突矛盾了。(-)减号:表达一个范围,如在小时字段中使用“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 3 * * ?     每天3点执行0 5 3 * * ?     每天3点5分执行0 5 3 ? * *     每天3点5分执行,与上面作用相同0 5/10 3 * * ?  每天3点的 5分,15分,25分,35分,45分,55分这几个时间点执行0 10 3 ? * 1    每周星期天,3点10分 执行,注:1表示星期天0 10 3 ? * 1#3  每个月的第三个星期,星期天 执行,#号只能出现在星期的位置

在此我要说明,springBoot 中的 schedule 支持的 cron 表达式和这个不太相符,官方说的星期表示,1是周天,依次类推,但是我在测试过程中,1实际上代表的就是周一,口说无凭

那我就来贴代码和测试结果吧.

@Component@EnableSchedulingpublic class Task {    private static final Logger LOGGER = MyLogger.getLogger(Task.class);    @Scheduled(cron = "0 46 20 ? * 1")    public void task() {        LOGGER.info("听说今天是周日");    }

测试结果:

2017-05-08 20:46:00.006  INFO 18838 --- [pool-1-thread-1] com.yiyexy.task.Task                     : 听说今天是周日

按照上面的解释来讲,第六域是星期,并且值是1那么代表是周日运行,但是我的运行结果表明是周一运行,我在此表示很无奈。

最后我觉得用单词来表示周几,这样就不会出这种问题了,于是

@Component@EnableSchedulingpublic class Task {    private static final Logger LOGGER = MyLogger.getLogger(Task.class);    @Scheduled(cron = "0 49 20 ? * MON")    public void task() {        LOGGER.info("听说今天是周日");    }}

测试结果:

2017-05-08 20:49:00.005  INFO 18864 --- [pool-1-thread-1] com.yiyexy.task.Task                     : 听说今天是周日

好了,这个坑就记录到这吧,最后奉上一句,时间是检验真理的唯一标准。

——End——

Java后端编程读者群正式成立

推荐阅读

明天见(。・ω・。)ノ♡

本文分享自微信公众号 - Java后端编程(java_hdbc)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Easter79 Easter79
2年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这