cron 表达式
如果cron 秒不能被60正常 在0s会立即执行
0/1 * * * * ?
2023-03-10 16:07:39
2023-03-10 16:07:40
2023-03-10 16:07:41
2023-03-10 16:07:42
2023-03-10 16:07:43
0/9 * * * * ?
注意第5列 差4s就执行
2023-03-10 16:08:27
2023-03-10 16:08:36
2023-03-10 16:08:45
2023-03-10 16:08:54
2023-03-10 16:09:00
2023-03-10 16:09:09
2. @Scheduled 线程问题定时都是用一个线程
不修改配置情况下所有 定时都是用一个线程
Spring Boot 计划任务中的一个“坑” - Robothy - 博客园
spring.task.scheduling.pool.size=5
ScheduledThreadPoolExecutor 重复执行
先看一段代码
AtomicInteger s_s = new AtomicInteger(0);
//定一个定时线程
private ScheduledThreadPoolExecutor heartPool = new ScheduledThreadPoolExecutor(1);
。。。。
scheduledFuture=heartPool.scheduleAtFixedRate(()->{
int i = s_s.incrementAndGet();
if(i==3){
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
log.info("11111111111111111111111111");
},0,2, TimeUnit.SECONDS);
2023-03-10 16:17:55.543 INFO 4276 --- [nio-5050-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2023-03-10 16:17:55.675 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:17:57.675 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:09.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:09.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:09.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:09.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:09.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:09.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:11.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
2023-03-10 16:18:13.676 INFO 4276 --- [pool-2-thread-1] c.d.s.sql.controller.UserInfoController : 11111111111111111111111111
定时任务如果没有延迟 执行2s一次,
但是中间线程延迟一次后,延迟期间数据会被重复执行多次
所以在执行定时时候要注意时间长久延迟会照成定时重复执行,尽量保证在每次延迟时间内执行完成