Cron
- Cron表达式
- 定时任务
- 计划任务
Chronological
英
/ˌkrɒnəˈlɒdʒɪk(ə)l/
adj.
按发生时间顺序排列的;(年龄)按时间计算的
1. 月 周设计精妙吗?
- 学习
0/5 * * * * ? *
秒 分 时 日 月 周 年
1. 年一般省略。为:0/5 * * * * ?
2. 日:可以叫做天都行。总之就是:天月,如:1-31。1月中最多31天。
3. 日 和 周 是冲突的。必然有一个设置为 ?
因为现实世界,如:本月1号,又是周一,非常不可能。
反之也是:周一,又要本月1号,也不可能
- 秒分时 日月,为从小到大。
- 周年,就当周年庆送的吧。
2. 百度搜索 在线Cron表达式网站的问题
- 周页面 运行结果,应该都有Bug
排行第一的:https://cron.qqe2.com/
- 分钟—从X分钟开始,每X分钟执行一次,存在Bug (下面的例子是正确的)
- 生成的错误:Cron表达式为:* 1/5 * * * ? *
- 所以:最新10次运行结果,也是错误 (变成每秒执行一次)
- 排行第五的:http://c.jsrun.net/app/cron,同样的Bug
排行第二的:https://www.pppet.net/
-
X分钟执行一次逻辑正确:0 0/2 * * * ?
-
https://www.itgongju.com/cron 排行第三的,X分钟执行一次逻辑正确
排行第四的:https://tools.kalvinbg.cn/dev/cron
- 只点击:分钟页面,存在各种Bug
3. 关于 X分钟执行一次 * 开头
- 两种正确写法:
- 只要是0开头的,都是正确的吧
0 0/3 * * * ?
0 */4 * * * ?
-
*开头都是错误的。 尽管这是:Cron表达式网站 生成的
-
*是任意秒,叠加分钟的限制,本身就是个悖论?还是Java的spring @Scheduled(cron = “”)的问题
-
想要X分钟执行一次,结果是1秒执行一次。错其一。
-
1秒执行一次,是不确定性的,
-
比如:* 0/6,就是 5以上,就会一次都不执行。
-
即:设置 大的数后,也不会一秒执行一次。
-
* 1/2 * * * ? 设置这样比较小的数,可以1秒执行一次
-
-
-
* 0/4 * * * ?
* */33 * * * ?
* 1/12 * * * ?
4. Spring 定时任务的年问题
-
Java的spring @Scheduled(cron = “”)的 存在,不支持年的问题
- 即随意一个 cron表达式,带年的 都会造成 整个程序无法启动
0/55 * * * * ? * //秒 分 时 日 月 周 年 //必须是 6个字段。 Cron expression must consist of 6 fields (found 7 in "0/55 * * * * ? *")
sql JOIN连接只支持最近的表的连接
- s2 距离 s3 最近,可以使用。
SELECT
*
FROM
student s1,
student s2
LEFT JOIN student s3 ON s2.id = s3.id
-- WHERE s1.id = s2.id
- s1 不是离 s3最近的表,不能使用
LEFT JOIN student s3 ON s1.id = s3.id
报错:
> 1054 - Unknown column 's1.id' in 'on clause'
1. 只支持最近的表 不包括 前面的JOIN
SELECT
*
FROM
student s1
LEFT JOIN student s2 ON s1.id= s2.id -- 这里 s2,不能使用s3连接。ON s3.id= s2.id
LEFT JOIN student s3 ON s1.id = s3.id -- S3 依然可以使用 S1
如果是内连接,还是使用 where条件连接吧,随意使用 表都能连接
SELECT
*
FROM
student s1,
student s2,
student s3
WHERE
s3.id = s1.id