Spring Task定时任务

以下是一个使用 Spring Task 实现定时任务的示例代码:

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

@Component
@EnableScheduling
public class MyScheduledTasks {

// 每5秒执行一次
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
System.out.println("执行固定速率任务: " + System.currentTimeMillis());
}

// 初始延迟1秒后执行,之后每3秒执行一次
@Scheduled(initialDelay = 1000, fixedDelay = 3000)
public void fixedDelayTask() {
System.out.println("执行固定延迟任务: " + System.currentTimeMillis());
}

// 使用Cron表达式,每天早上8点执行
@Scheduled(cron = "0 0 8 * * ?")
public void cronTask() {
System.out.println("执行Cron定时任务: " + System.currentTimeMillis());
}
}

在 Spring Boot 项目中使用 Spring Task 的步骤:

  1. 添加依赖(如果是 Spring Boot 项目,通常已包含在 spring-boot-starter 中):

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    </dependency>
  2. 在主应用类上添加 @EnableScheduling 注解启用定时任务支持:

    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);
    }
    }
  3. 创建定时任务类,使用 @Scheduled 注解定义定时任务方法。

@Scheduled 注解的常用参数:

  • fixedRate:固定速率执行,单位为毫秒
  • fixedDelay:固定延迟执行,上一次执行完成后延迟指定时间再执行
  • initialDelay:初始延迟,第一次执行前的延迟时间
  • cron:使用 Cron 表达式定义执行时间规则

Cron 表达式示例:

  • 0 0 12 * * ?:每天中午12点触发
  • 0 15 10 ? * *:每天上午10:15触发
  • 0 0/5 * * * ?:每5分钟触发一次
  • 0 0 0 * * ?:每天凌晨0点触发

注意事项:

  • 确保 Spring 组件扫描能够找到你的定时任务类
  • 默认情况下,所有定时任务都在同一个线程中执行,如果需要异步执行,可以结合 @Async 注解使用
  • 生产环境中建议配置合适的线程池来执行定时任务