SpringBoot集成定时任务

在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务

1. Spring Boot 使用定时任务@Scheduled-fixedRate方式
1.1 创建定时任务

  • pom 配置(只需要引入 Spring Boot Starter jar包即可,Spring Boot Starter 包中已经内置了定时的方法。)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
  • 在Spring Boot的主类中加入 @EnableScheduling 注解,启用定时任务的配置
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class SpringbootSchedulingApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootSchedulingApplication.class, args);
    }

}
  • 创建定时任务实现类
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class SchedulerTask {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedRate = 5000)
    private void processFixedRate(){
        System.out.println("processFixedRate方式:定时任务开始运行,现在时间:" + dateFormat.format(new Date()));
    }
}
  • 运行程序,控制台中可以看到类似如下输出,定时任务开始正常运作了。
processFixedRate方式:定时任务开始运行,现在时间:10:58:11
processFixedRate方式:定时任务开始运行,现在时间:10:58:16
processFixedRate方式:定时任务开始运行,现在时间:10:58:21
processFixedRate方式:定时任务开始运行,现在时间:10:58:26
processFixedRate方式:定时任务开始运行,现在时间:10:58:31

1.2 参数说明
在上面的入门例子中,使用了 @Scheduled(fixedRate = 5000) 注解来定义每过5秒执行的任务,对于 @Scheduled 的使用可以总结如下几种方式:

  • @Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行
  • @Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行
  • @Scheduled(initialDelay=1000, fixedRate=5000) :第一次延迟1秒后执行,之后按fixedRate的规则每5秒执行一次

2. Spring Boot 使用定时任务@Scheduled-cron 方式
2.1 修改 SchedulerTask

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
public class SchedulerTask {
    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    @Scheduled(cron="*/5 * * * * ?")
    private void processCron(){
    System.out.println("processCron方式:定时任务开始运行,现在时间:" + dateFormat.format(new Date()));
    }
}
  • 运行程序,控制台中可以看到类似如下输出,定时任务开始正常运作了
processCron方式:定时任务开始运行,现在时间:11:11:30
processCron方式:定时任务开始运行,现在时间:11:11:35
processCron方式:定时任务开始运行,现在时间:11:11:40
processCron方式:定时任务开始运行,现在时间:11:11:45
processCron方式:定时任务开始运行,现在时间:11:11:50

2.2 参数说明

注:不会写cron表达式的小伙伴可百度 在线cron生成器  /手动狗头

cron 一共有七位,最后一位是年,Spring Boot 定时方案中只需要设置六位即可:
第一位,表示秒,取值 0 ~ 59;

第二位,表示分,取值 0 ~ 59;

第三位,表示小时,取值 0 ~ 23;

第四位,日期天/日,取值 1 ~31;

第五位,日期月份,取值 1~12;

第六位,星期,取值 1 ~ 7,星期一,星期二...,注,1 表示星期 天,2 表示星期一;

第七位,年份,可以留空,取值 1970 ~ 2099。

cron 中,还有一些特殊的符号,含义如下:

(*)星号,可以理解为每的意思,每秒、每分、每天、每月、每年...。

(?)问号,问号只能出现在日期和星期这两个位置,表示这个位置的值不确定。

(-)减号,表达一个范围,如在小时字段中使用“10 ~ 12”,则表示从 10 到 12 点,即 10、11、12。

(,)逗号,表达一个列表值,如在星期字段中使用“1、2、4”,则表示星期一、星期二、星期四。

(/)斜杠,如 x/y,x 是开始值,y 是步⻓长,比如在第一位(秒),0/15 就是从 0 秒开始,每隔 15 秒执 行一次。

下面列举几个常用的例子。 

       (1)0 0 2 1 * ? *   表示在每月的1日的凌晨2点调整任务

  (2)0 15 10 ? * MON-FRI   表示周一到周五每天上午10:15执行作业

  (3)0 15 10 ? 6L 2002-2006   表示2002-2006年的每个月的最后一个星期五上午10:15执行作

  (4)0 0 10,14,16 * * ?   每天上午10点,下午2点,4点 

  (5)0 0/30 9-17 * * ?   朝九晚五工作时间内每半小时 

  (6)0 0 12 ? * WED    表示每个星期三中午12点 

  (7)0 0 12 * * ?   每天中午12点触发 

  (8)0 15 10 ? * *    每天上午10:15触发 

  (9)0 15 10 * * ?     每天上午10:15触发 

  (10)0 15 10 * * ? *    每天上午10:15触发 

  (11)0 15 10 * * ? 2005    2005年的每天上午10:15触发 

  (12)0 * 14 * * ?     在每天下午2点到下午2:59期间的每1分钟触发 

  (13)0 0/5 14 * * ?    在每天下午2点到下午2:55期间的每5分钟触发 

  (14)0 0/5 14,18 * * ?     在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 

  (15)0 0-5 14 * * ?    在每天下午2点到下午2:05期间的每1分钟触发 

  (16)0 10,44 14 ? 3 WED    每年三月的星期三的下午2:10和2:44触发 

  (17)0 15 10 ? * MON-FRI    周一至周五的上午10:15触发 

  (18)0 15 10 15 * ?    每月15日上午10:15触发 

  (19)0 15 10 L * ?    每月最后一日的上午10:15触发 

  (20)0 15 10 ? * 6L    每月的最后一个星期五上午10:15触发 

  (21)0 15 10 ? * 6L 2002-2005   2002年至2005年的每月的最后一个星期五上午10:15触发 

  (22)0 15 10 ? * 6#3   每月的第三个星期五上午10:15触发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值