乐趣区

Spring-Boot-的简单教程七定时任务

很多时候我们需要某些任务定时进行触发,自动执行。可能需要在寂静的深夜,现在就需要定时任务的出现了。

  1. 首先我们先创建一个 springboot 的项目,神奇的是不需要额外引入其他的依赖,不过我们需要在程序的入口上添加一个 @EnableScheduling 注释,开启调度任务。

    @SpringBootApplication
    @EnableScheduling
    public class TimingtasksApplication {public static void main(String[] args) {SpringApplication.run(TimingtasksApplication.class, args);
        }
    
    }
  2. 接下来我们需要写一个方法来实现定时调用的功能。

    @Component
    public class TimingTasks {private static final Logger logger = LoggerFactory.getLogger(TimingTasks.class);
    
        @Scheduled(fixedRate = 5000)
        public void printCurrentTime(){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String time = sdf.format(new Date());
            logger.info("现在的时间为:{}",time);
        }
    
    }
  3. 我们来看一下 @Scheduled 注解的参数。

    cron:一个类似 cron 的表达式,扩展了通常的 UN * X 定义,包括秒,分,时,星期,月,年的触发器。fixedDelay:在最后一次调用结束和下一次调用开始之间以固定周期(以毫秒为单位)执行带注释的方法。(要等待上次任务完成后)fixedDelayString:同上面作用一样,只是 String 类型
    fixedRate:在调用之间以固定的周期(以毫秒为单位)执行带注释的方法。(不需要等待上次任务完成)fixedRateString:同上面作用一样,只是 String 类型
    initialDelay:第一次执行 fixedRate() 或 fixedDelay() 任务之前延迟的毫秒数。initialDelayString:同上面作用一样,只是 String 类型
    zone:指明解析 cron 表达式的时区。

    cron 参数简单的展示,可以自己尝试一下:

     每隔 5 秒执行一次:"*/5 * * * * ?"
    每隔 1 分钟执行一次:"0 */1 * * * ?"
    每天 23 点执行一次:"0 0 23 * * ?"
    每天凌晨 1 点执行一次:"0 0 1 * * ?"
    每月 1 号凌晨 1 点执行一次:"0 0 1 1 * ?"
    每月最后一天 23 点执行一次:"0 0 23 L * ?"
    每周星期天凌晨 1 点实行一次:"0 0 1 ? * L"
    在 26 分、29 分、33 分执行一次:"0 26,29,33 * * * ?"
    每天的 0 点、13 点、18 点、21 点都执行一次:"0 0 0,13,18,21 * * ?"
    表示在每月的 1 日的凌晨 2 点调度任务:"0 0 2 1 * ? *"
    表示周一到周五每天上午 10:15 执行作业:"0 15 10 ? * MON-FRI" 
    表示 2002-2006 年的每个月的最后一个星期五上午 10:15 执行:"0 15 10 ? 6L 2002-2006"
  4. 启动项目看一下控制台的输出:

     连接到目标 VM,地址:'127.0.0.1:63924', transport: 'socket'
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    (()\___ | '_ |'_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.1.6.RELEASE)
    
    2019-07-25 09:41:34.783  INFO 19276 --- [main] c.z.timingtasks.TimingtasksApplication   : Starting TimingtasksApplication on DESKTOP-PRKC45A with PID 19276 (D:\WorkSpace\Study\timingtasks\target\classes started by zhouzhaodong in D:\WorkSpace\Study\timingtasks)
    2019-07-25 09:41:34.786  INFO 19276 --- [main] c.z.timingtasks.TimingtasksApplication   : No active profile set, falling back to default profiles: default
    2019-07-25 09:41:35.194  INFO 19276 --- [main] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
    2019-07-25 09:41:35.205  INFO 19276 --- [scheduling-1] c.z.timingtasks.util.TimingTasks         : 现在的时间为:2019-07-25 09:41:35
    2019-07-25 09:41:35.209  INFO 19276 --- [main] c.z.timingtasks.TimingtasksApplication   : Started TimingtasksApplication in 0.722 seconds (JVM running for 1.323)
    2019-07-25 09:41:40.206  INFO 19276 --- [scheduling-1] c.z.timingtasks.util.TimingTasks         : 现在的时间为:2019-07-25 09:41:40
    2019-07-25 09:41:45.207  INFO 19276 --- [scheduling-1] c.z.timingtasks.util.TimingTasks         : 现在的时间为:2019-07-25 09:41:45

    测试成功啦!

    源码下载地址:https://github.com/zhouzhaodo…

退出移动版