springboot使用@Scheduled作定时任务详细用法

springboot中quartz可以作定时任务,@Scheduled也可以

Spring Boot启动类标注@EnableScheduling,然后再开发一个服务类,:

测试简易定时任务:

package com.springboot.chapter13.service.impl;
/**** imports ****/
@Service
public class ScheduleServiceImpl {
    
    
    // 计数器
    int count1 = 1;
    int count2 = 1;

    // 每隔一秒执行一次
    @Scheduled(fixedRate = 1000)
    // 使用异步执行
    @Async
    public void job1() {
    
    
        System.out.println("【" +Thread.currentThread().getName()+"】"
                + "【job1】每秒钟执行一次,执行第【" + count1 + "】次");
        count1 ++;
    }

    // 每隔一秒执行一次
    @Scheduled(fixedRate = 1000)
    // 使用异步执行
    @Async
    public void job2() {
    
    
        System.out.println("【" +Thread.currentThread().getName()+"】"
                + "【job2】每秒钟执行一次,执行第【" + count2 + "】次");
        count2 ++;
    }
    }

这里的注解@Scheduled配置为按时间间隔执行,每隔1 s便执行一次。使用@Async注解代表这需要使用异步线程执行,上述中@Scheduled只是按照时间间隔执行,有时候需要指定更为具体的时间,例如,每天晚上11:00开始跑批量生成报表,或者一些任务在每周日执行。为了能够更为精确地指定任务执行的时间,所以有必要更为细致地研究@Scheduled的配置项,如表13-1所示。
在这里插入图片描述
表13-1中的配置项除了cron外都比较好理解,只有cron是可以通过表达式更为灵活地配置运行的方式。cron有6~7个空格分隔的时间元素,按顺序依次是“秒 分 时 天 月 星期 年”,其中年是一个可以不配置的元素,例如下面的配置:
0 0 0 ? * WED 这个配置表示每个星期三中午0点整。这个表达式需要注意的是其中的特殊字符,如?和*,这里因为天和星期会产生定义上的冲突,所以往往会以通配符?表示,它表示不指定值,而*则表示任意的月。除此以外还会有表13-2所示的其他通配符。 表13-2 通配符含义 为了说明它们的使用,下面举例如表13-3所示。
在这里插入图片描述

cron表达式:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41358574/article/details/120751180