最近在忙一个风控项目,其中有一个需求是定时巡检业务中产生的审计数据,寻找其中可能存在的风险数据,以便对对应的违规操作进行管控,避免潜在的资损。我们可爱又牛掰的TL看我最近的绩效在团队中垫底了,为了让我的绩效好看点,于是就把这个任务指派给了我,真是太感动了,感动到流泪~~
好了,背景的确很感动,但是感动之后,我开始搬砖了,不然楼主要卷铺盖走人了。楼主的项目是基于 springboot搭建的, 为了快速实现功能同时减少其他依赖的引入,楼主采用了spring自带的定时任务框架,通过@Scheduled定义具体的定时任务。@Scheduled注解包含一个cron属性,用来指定具体的cron表达式。为了顺利地完成工作,保住饭碗,楼主认真学习总结了cron表达式,其结构如下:
second minute hour dayOfMonth month dayOfWeek year
字段
取值
特殊值
second (秒)
0~59的整数
%2c – * /
minute (分)
0~59的整数
%2c – * /
hour (时)
0~23的整数
%2c – * /
dayOfMonth (日期)
1~31的整数(需要考虑实际的天数)
%2c – * ? / L W C
month (月)
1~12的整数或JAN-DEC
%2c – * /
dayOfWeek (星期)
1~7的整数或SUN-SAT (1=SUN)
%2c – * ? / L C #
year (年,可选的)
1970~2099
%2c – * /
如上图所示,每个域都使用数字,但也可以使用一些特殊字符,其含义如下:
* 匹配该字段域任意值,比如minute域使用*,表示每分钟都会触发事件。
? 只能用在dayOfMonth和dayOfWeek两个域,表示该域匹配任意值或不设置值,且当其中一个域为确定值时,另一个域必须为?(表示另一个域不设置值)。
%2c 表示列举枚举值,比如minute域设为5%2c10%2c15 ,表示在第5、10、15分每分钟执行一次
/ 表示之一次延迟指定时间触发,然后每隔一定时间触发一次(上一次结束与下一次开始之间的时间间隔),比如second域设为0/5,表示0秒触发一次,每次执行完成之后隔5秒再触发下一次
L 表示最后(last简写),只能用在dayOfMonth和dayOfWeek两个域,用在dayOfMonth域(前面不需要加数字)表示一个月的最后一天,用在dayOfWeek域,如果前面没有数字,表示7(星期六),如果前面有数字,表示一个月的最后一个星期几。比如6L,表示一个月的最后一个星期五。
W 表示当月(最近寻找不会跨过月份)离指定日期最近的那个工作日(weekday简写),只能用在dayOfMonth域。比如6W,如果6号是星期六,则最近的工作日为5号(即星期五),如果6号是星期日,则最近的工作日为7号(即下个星期一),否则就表示6号本身。再比如31W,如果31W是星期六或星期日,则最近的工作日都是之前的星期五,不会跨月份。
LW 一个月的最后一个工作日。
# 表示一个月中第几个星期几,前面的数字表示星期几,后面的数字表示第几个,只能用在dayOfWeek域,比如7#2,表示一个月中第二个星期六。
C 这个字符楼主实在没搞清楚是干啥的,基本也很少用到,就没去深究了。
0 0 0 1 * ? 每个月1号凌晨零点整 * 0/5 * * * ? 每5分钟触发一次 0 30 7 * * ? 每天早上七点半 0 30 7 * * 2-6 工作日(周一到周五)早上七点半 0 0 8 L * ? 每个月最后一天早上八点整 0 0 8 L-1 * ? 每个月倒数第二天早上八点整 0 0 8 LW * ? 每个月最后一个工作日早上八点整 0 0/30 9-17 * * ? 朝九晚五每半小时触发 0 0/5 14%2c18 * * ? 每天下午2:00~2:55和6:00~6:55之间每5分钟触发一次 0 0 8 ? * 6#3 每个月第三个星期五早上八点整 0 0 8 ? * 6L 每个月最后一个星期五早上八点整
由于月份和星期域可以用英文简称代替,楼主为了方便使用,收集整理了月份与星期的简写,如下
一月 January Jan 二月 February Feb 三月 March Mar 四月 April Apr 五月 May May 六月 June Jun 七月 July Jul 八月 August Aug 九月 Septemper Sep 十月 October Oct 十一月 November Nov 十二月 December Dec 星期一 Monday Mon 星期二 Tuesday Tue 星期三 Wednesday Wed 星期四 Thursday Thu 星期五 Friday Fri 星期六 Saturday Sat 星期日 Sun Sun
通过完成TL给的这个需求,楼主对cron表达式有了一个深入的了解,感觉还蛮有成就感的,心中更是暗暗窃喜,今年的绩效栏又可以多加一笔了。当然,作为一名码农,最重要的还是要不断地尝试,只有多练、多看、多学、多想,编程才能更进一步。
近日,据Reddit上的帖子和Cyber Kendra上的一份报告显示,LAPSUS$ (Lapsus) 组织入侵了微软的DevOps帐户,该组织此前入侵了NVIDIA和三星。 下面的截图由Lapsus发布,但很快被删除,由Cyber Kendra保存了下来。该组织声称可以访问微软的一些DevOps...
研究人员近日发现了针对乌克兰计算机的新型擦除恶意软件(以破坏关键文件和数据为目的),这是俄乌冲突以来发现的第 3 款擦除恶意软件。 这种被称为 CaddyWiper 的恶意软件是由总部位于斯洛伐克的网络安全公司 ESET 的研究人员发现的,他们在周一发布的推文中分享了细节。 据研究人员称,该...
Hackernews 编译,转载请注明出处: 从2021年6月,一个可能来自巴基斯坦的攻击者与一个针对感兴趣目标的后门攻击有关,该攻击使用了一种基于 windows 的远程访问木马,名为 CrimsonRAT。 Cisco Talos公司的研究人员在与The Hacker New...
大多数人都知道,现代电子设备,如智能手机、平板电脑和计算机,存储了我们个人和私人生活的一系列信息,我们不希望陌生人得到这些信息。然而,许多人没有考虑到他们的车辆信息娱乐系统和其他系统内到底储存了多少个人信息。 现在一份报告研究了全球15大汽车制造商,并调查了它们之间的数据共享政策。该研究对每个品牌2...
Hackernews 编译,转载请注明出处: 在苹果 Safari 15的 IndexedDB API 实现中放入的一个软件漏洞可能被恶意网站利用,以追踪用户在网络浏览器中的在线活动,更糟糕的是,它还可能泄露用户的身份。 2021年11月28日,防欺诈保护软件公司 FingerprintJS...
据BBC报道,本月有55名阿富汗人的资料泄露,据称,他们是Arap方案(阿富汗重新安置和援助政策)候选人。他们的电子邮件地址对所有收件人都是可见的,而这些接收者中至少有一人来自阿富汗国家军队。根据Arap方案,任何协助英国在阿富汗战斗的阿富汗人,都可以申请到英国,以免受到塔利班的迫害。如果本次的泄...