[关闭]
@File 2019-10-14T08:49:21.000000Z 字数 2429 阅读 133

spring-schedule 定时任务

java


二、cron表达式

参考文档:https://blog.csdn.net/private66/article/details/82261410

1. 基本格式:@Scheduled(cron="秒 分 时 日 月 周")

2. 语法:

*? 一样,填充符
/ 间隔秒数
8-10 时间范围
8,10 多个时间
L 最后
W 工作日
SUN 周日(1)
MON 周一(2)
TUE 周二(3)
WED 周三(4)
THU 周四(5)
FRI 周五(6)
SAT 周六(7)

3. 特殊字符适用范围:

位置 取值范围 可用特殊语法
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / L W C
1-12 或者 JAN-DEC , - * /
1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /

二、spring-boot集成

@EnableScheduling 入口开启定时任务

  1. @SpringBootApplication
  2. @EnableScheduling
  3. public class Application {
  4. public static void main(String[] args) throws Exception {
  5. SpringApplication.run(Application.class);
  6. }
  7. }

@Scheduled 设置定时任务

cron: 通过cron表达式控制触发时间(常用)
fixedRate: 间隔多少毫秒再次触发(常用)
fixedDelay: 完成后延迟多少毫秒(常用)
initialDelay: 延迟多少毫秒后再触发(常用)
zone: 时区设置,默认当前时区
fixedRateString: 字符串形式的fixedRate
fixedDelayString: 字符串形式的fixedDelay
initialDelayString: 字符串形式的initialDelay

  1. @Scheduled("0 0 10,14,16 * * ?") // 每天上午10点,下午2点,4点
  2. @Scheduled(0 0/30 9-17 * * ?) // 朝九晚五工作时间内每半小时
  3. @Scheduled(0 0 12 ? * WED) // 表示每个星期三中午12点
  4. @Scheduled("0 0 12 * * ?") // 每天中午12点触发
  5. @Scheduled("0 15 10 ? * *") // 每天上午10:15触发
  6. @Scheduled("0 15 10 * * ?") // 每天上午10:15触发
  7. @Scheduled("0 15 10 * * ? *") // 每天上午10:15触发
  8. @Scheduled("0 15 10 * * ? 2005") // 2005年的每天上午10:15触发
  9. @Scheduled("0 * 14 * * ?") // 在每天下午2点到下午2:59期间的每1分钟触发
  10. @Scheduled("0 0/5 14 * * ?") // 在每天下午2点到下午2:55期间的每5分钟触发
  11. @Scheduled("0 0/5 14,18 * * ?") // 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
  12. @Scheduled("0 0-5 14 * * ?") // 在每天下午2点到下午2:05期间的每1分钟触发
  13. @Scheduled("0 10,44 14 ? 3 WED") // 每年三月的星期三的下午2:10和2:44触发
  14. @Scheduled("0 15 10 ? * MON-FRI") // 周一至周五的上午10:15触发
  15. @Scheduled("0 15 10 15 * ?") // 每月15日上午10:15触发
  16. @Scheduled("0 15 10 L * ?") // 每月最后一日的上午10:15触发
  17. @Scheduled("0 15 10 ? * 6L") // 每月的最后一个星期五上午10:15触发
  18. @Scheduled("0 15 10 ? * 6L 2002-2005") // 2002年至2005年的每月的最后一个星期五上午10:15触发
  19. @Scheduled("0 15 10 ? * 6#3") // 每月的第三个星期五上午10:15触发

三、并行执行

1. 修改配置

  1. @Component
  2. public class MySheduleConfig implements SchedulingConfigurer {
  3. public Executor getExecutor() {
  4. return Executors.newScheduledThreadPool(3); //开启特定的任务线程,开启3个
  5. }
  6. //
  7. @Override
  8. public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
  9. taskRegistrar.setScheduler(getExecutor());
  10. }
  11. }

2. 任务类

  1. @Component
  2. public class MySchedule {
  3. @Scheduled(cron = "0/5 * * * * *")
  4. public void doSomething() {
  5. System.out.println("每五秒执行的任务线程名:" + Thread.currentThread().getName());
  6. System.out.println("定时任务开始................");
  7. }
  8. @Scheduled(cron = "0/3 * * * * *")
  9. public void doSomething1() {
  10. System.out.println("每3秒执行的任务线程名:" + Thread.currentThread().getName());
  11. System.out.println("定时任务每3秒执行一次次,任务开始执行...");
  12. }
  13. @Scheduled(cron = "0/10 * * * * *")
  14. public void doSomething2() {
  15. System.out.println("每10秒执行的任务线程名:" + Thread.currentThread().getName());
  16. System.out.println("定时任务每天早8点到晚8点,每20分钟执行一次,开始");
  17. }
  18. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注