个人技术分享

Spring Task-定时任务

1. 需求

在开发项目过程中,我们可能会需要项目每隔一段时间就去处理系统中的脏数据,或者可能需要系统定时发送通知到用户端等等,这些操作如果交给我们手动处理会非常繁琐,spring开发了自己的任务管理组件Task,使用该组件可以很方便地实现定时任务。

2. cron表达式

在了解Spring Task之前,我们先了解一下cron表达式,该表达式主要用于表示任务的执行时间或者执行频率,比如每分钟执行一次,在每天凌晨3点执行一次。

  • 形式:cron表达式在Java中本质上是一个字符串,形如“* * * * * * * ”分别对应秒、分钟、小时、日期、月份、星期几、年份(年份可以不写),由于日期和星期几不是绝对的对应关系,比如4月30日不总是星期二,所以二者之间有一个可以使用"?"来表示。
  • 举例:“0 0/1 * * * ?”和“0 * * * * ? ”都表示每分钟执行一次任务
  • 自动生成cron表达式的网站:在线Cron表达式生成器 (qqe2.com)

3. 使用方法

  • 导入Maven坐标(主要jar包是在spring-context里面)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
  • 创建定时任务类(创建一个普通的类,添加@Commpoent注解即可)

  • 在方法上添加@Scheduled注解和cron表达式

    @Component
    public class MySpringTask {
    
        /**
         * 设置为定时任务(开启线程)
         */
        @Scheduled(cron = "0 0/1 * * * ?")
        public void print(){
            System.out.println(Thread.currentThread().getName() + " spring task run...");
        }
    
    
    
    }