spring boot设置定时任务

使用定时任务完成一些业务逻辑,比如天气接口的数据获取,定时发送短信,邮件。以及商城中每天用户的限额,定时自动收货等等。定时器在项目中是常常会使用到的一个手段。

定时任务在Spring Boot中的集成

在启动类中加入开启定时任务的注解:
在SpringBoot中使用定时任务相当的简单。首先,我们在启动类中加入@EnableScheduling来开启定时任务。
这里写图片描述

之后我们直接创建实现定时任务的Service即可

这里写图片描述

@Scheduled

可以使用cron表达式来制定每分钟启动一次定时器,除了该表达式外,还可以使用fixedRate,fixedDelay等来作为时间配置。

这里写图片描述

第一张图片中输出的ZZP:254779489776178507600:15:14是从00:15:14开始,并且每5秒打印一次,由此可知:
项目启动时间00:15:09(这对理解之后的initialDelay有用)
fixedRate:
上一次 启动时间点之后 X秒执行一次
同时我们可以看到<================delay :000:15:59count===============>和<================its0count===============>00:15:59都是从00:15:59开始的,也就是项目开始后的50秒之后,
由此可知:
fixedDelay:
上一次 结束时间点之后 每X秒执行一次
通过第二张图可以看到之后的<================delay :000:15:59count===============>是间隔6秒执行的,
由此可知:
initialDelay:
第一次延迟 X秒执行,之后按照fixedRate的规则每X秒执行

默认情况下,如果什么都不进行配置,就会导致一个问题,系统中所有的定时任务都是使用的一个线程去执行的,也就是说,如果如果同一个时刻有2个定时任务需要执行,那么只可能有一个定时任务在执行,如果要解决这个问题可以定义一个自定的任务调度线程池即可。
实现功能:
启动3个定时任务,每隔1s打印出一句话,观看是同一个线程打印的还是不同的线程打印的。
实现步骤:
1、在启动类上增加@EnableScheduling注解
2、配置一个类型为 TaskScheduler类型的bean (可以将这个类型的bean删除,看程序输出的结果)
3、编写一个任务类,每隔1s输出内容

首先编写启动类:
这里写图片描述

然后编写任务类:
这里写图片描述

执行结果:
这里写图片描述

如何理解 fixedRate 和 fixedDelay 的区别

fixedRate 任务两次执行时间间隔是任务的开始点,而 fixedDelay 的间隔是前次任务的结束与下次任务的开始。
大致用示意字符串来表示如下(每个 T1, 或 T2 代表任务执行秒数(每次任务执行时间不定),假定 fixedRate 或 fixedDelay 的值是 5 秒,用 W 表示等待的数)
fixedRate:
T1.T1WWWT2.T2.T2WW.T3.T3.T3.T3.T3.T4.T4.T4.T4.T4.T4.T4T5T5WWWT6.T6……..
fixedDelay:
T1.T1.WWWWW.T2.T2.T2WWWWW.T3.T3.T3.T3.T3.WWWWW.T4.T4.T4.T4.T4.T4.T4.WWWWWT6.T6……
一般来说能理解到上面两个场景已经差不多了,相比而言 fixedDelay 简单些,盯着上一次任务的屁股就行。

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot提供了一种简单而强大的方式来实现定时任务调度。下面是使用Spring Boot实现定时任务调度的步骤: 1. 添加依赖:在`pom.xml`文件中添加Spring Boot定时任务依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. 创建定时任务类:创建一个继承自`QuartzJobBean`的定时任务类,并实现`executeInternal`方法,该方法中编写具体的定时任务逻辑。 ```java import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class MyJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { // 定时任务逻辑 System.out.println("定时任务执行中..."); } } ``` 3. 配置定时任务:在`application.properties`或`application.yml`文件中配置定时任务的相关属性,例如触发时间、触发频率等。 ```yaml spring: quartz: job-store-type: memory properties: org: quartz: scheduler: instanceName: MyScheduler instanceId: AUTO job-details: my-job: cron: 0/5 * * * * ? job-class-name: com.example.MyJob ``` 4. 启动定时任务:在Spring Boot的启动类上添加`@EnableScheduling`注解,开启定时任务的自动配置。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 5. 运行定时任务:启动Spring Boot应用程序后,定时任务将按照配置的触发时间和频率执行。 以上就是使用Spring Boot实现定时任务调度的基本步骤。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值