很多时候我们需要某些任务定时进行触发,自动执行。可能需要在寂静的深夜,现在就需要定时任务的出现了。
  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...


周兆东
107 声望21 粉丝

一个java小白的成长之路。。。