自学内容网 自学内容网

Spring 定时任务 @Scheduled 注解

@Scheduled 注解

@Scheduled 注解是 Spring 框架中用于定义定时任务的一种方式。通过使用这个注解,你可以非常方便地在指定的时间间隔或指定的时间点执行某个方法。

关键属性

以下是 @Scheduled 注解的一些关键属性及其用法:

‌fixedRate‌:表示任务的固定执行频率(以毫秒为单位),即从上一次任务开始执行到下一次任务开始执行的间隔时间。

示例:@Scheduled(fixedRate = 5000) 表示每隔5秒执行一次任务。

‌fixedDelay‌:表示任务执行完成后的固定延迟时间(以毫秒为单位),即从上一次任务执行结束到下一次任务开始执行的间隔时间。

示例:@Scheduled(fixedDelay = 5000) 表示任务执行完成后,延迟5秒再执行下一次任务。

‌cron‌:使用cron表达式定义任务的执行时间,cron表达式由6或7个字段组成,分别表示秒、分、时、日、月、星期(可选字段为年)。

示例:@Scheduled(cron = "0 0 12 * * ?") 表示每天中午12点执行任务。

‌initialDelay‌:表示任务首次执行前的延迟时间(以毫秒为单位),通常与其他属性(如 fixedRate 或 fixedDelay)结合使用。

示例:@Scheduled(fixedRate = 5000, initialDelay = 10000) 表示在应用启动后10秒开始,每隔5秒执行一次任务。

使用示例

首先,确保你的 Spring Boot 项目已经引入了 spring-boot-starter 依赖,并且启用了调度功能(默认情况下是启用的)。

示例代码

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTask {

    // 每隔5秒执行一次
    @Scheduled(fixedRate = 5000)
    public void fixedRateTask() {
        System.out.println("Fixed Rate Task executed at: " + System.currentTimeMillis());
    }

    // 任务执行完成后,延迟5秒再执行
    @Scheduled(fixedDelay = 5000)
    public void fixedDelayTask() {
        System.out.println("Fixed Delay Task executed at: " + System.currentTimeMillis());
    }

    // 每天中午12点执行
    @Scheduled(cron = "0 0 12 * * ?")
    public void cronTask() {
        System.out.println("Cron Task executed at: " + System.currentTimeMillis());
    }

    // 应用启动后10秒开始,每隔5秒执行一次
    @Scheduled(fixedRate = 5000, initialDelay = 10000)
    public void initialDelayTask() {
        System.out.println("Initial Delay Task executed at: " + System.currentTimeMillis());
    }
}

启用调度

确保你的 Spring Boot 应用已经启用了调度功能。通常,在 Spring Boot 项目中,通过在主应用类上添加 @EnableScheduling 注解来启用调度功能:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

注意事项

‌多线程‌:默认情况下,所有的定时任务都在一个单独的线程中顺序执行。如果某个任务执行时间较长,可能会影响其他任务的执行时间。

‌异常处理‌:默认情况下,如果定时任务抛出异常,任务会停止执行。你需要确保在任务方法中进行适当的异常处理。

‌任务配置‌:可以通过配置文件(如 application.properties 或 application.yml)动态配置定时任务的属性。

通过以上方式,你可以非常方便地在 Spring 应用中使用 @Scheduled 注解来实现定时任务。


原文地址:https://blog.csdn.net/achuiaiwajue/article/details/144405819

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!