scheduled定时任务

定时任务是一种在特定时间或时间间隔自动执行任务的技术。在Java中,特别是使用Spring框架开发时,可以通过@Scheduled注解来创建和管理定时任务。下面是关于如何使用@Scheduled注解创建定时任务的一些基本信息和示例:

基本用法

  1. 启用定时任务支持

在Spring Boot应用程序中,首先需要在启动类上添加@EnableScheduling注解以启用定时任务支持。

@SpringBootApplication
@EnableScheduling
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. 创建定时任务类

创建一个类并使用@Component注解标记,以便Spring将该类实例化并管理。

@Component
public class ScheduledTasks {
    @Scheduled(cron = "0/5 * * * * *") // 每5秒执行一次
    public void reportCurrentTime() {
        System.out.println("Current time: " + new Date());
    }
}

定时任务注解参数

  • cron:指定任务的执行时间,使用Cron表达式。

  • fixedRate:固定频率执行任务,每隔指定的时间间隔执行一次任务。

  • fixedDelay:固定延迟执行任务,在上一次任务执行完成后,等待指定的时间间隔再执行下一次任务。

  • initialDelay:初始延迟时间,在第一次执行任务之前的等待时间。

示例

以下是一个使用@Scheduled注解的简单示例,该任务每两秒执行一次,打印当前时间:

@Component
public class ScheduledDemo {
    @Scheduled(cron = "0/2 * * * * *")
    public void scheduledMethod() {
        System.out.println("定时器被触发 " + new Date());
    }
}

注意事项

  • 确保在application.propertiesapplication.yml中配置了正确的时区,否则定时任务可能不会按预期执行。

  • 如果任务执行时间较长,应考虑在while循环中加入Thread.sleep(1)以避免CPU使用率过高。

其他库

除了Spring框架,还有其他库可以用于创建定时任务,例如schedule库,它提供了更简单的API来安排任务执行。

import schedule
import time

def job():
    print("我又被执行啦!")

schedule.every(10).seconds.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)

以上就是使用@Scheduled注解创建定时任务的基本介绍。

Top