# Spring Boot `@Scheduled`注解示例

> 原文： [https://howtodoinjava.com/spring-boot/enable-scheduling-scheduled-job-example/](https://howtodoinjava.com/spring-boot/enable-scheduling-scheduled-job-example/)

为了使 **Spring Boot** 应用程序中的作业定期运行，Spring Boot 提供了[`@EnableScheduling`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/EnableScheduling.html)和[`@Scheduled`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html)注解。 让我们学习如何使用 **Spring boot @Scheduled** 注解。

假设您要每隔 10 秒运行一次作业。 您可以通过以下步骤实现此作业调度：

## 1\. 将`@EnableScheduling`添加到`SpringBootApplication`类

在您的 Spring Boot 应用程序类中添加`@EnableScheduling`注解。 `@EnableScheduling`是一个 Spring 上下文模块注解。 它通过`@Import(SchedulingConfiguration.class)`指令在内部导入[`SchedulingConfiguration`](https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/annotation/SchedulingConfiguration.html)

```java
@SpringBootApplication
@EnableScheduling
public class SpringBootWebApplication {

}

```

> 阅读更多：[在 Spring 中安排任务的 4 种方法](https://howtodoinjava.com/spring-core/4-ways-to-schedule-tasks-in-spring-3-scheduled-example/)

## 2\. 将 Spring boot `@Scheduled`注解添加到方法中

现在，您可以在要调度的方法上添加`@Scheduled`注解。 唯一的条件是方法应**没有参数**。

导入的`SchedulingConfiguration`将创建的`ScheduledAnnotationBeanPostProcessor`将扫描所有已声明的 bean，以查看是否存在`@Scheduled`注解。

对于每个没有参数的带注解的方法，将创建适当的执行程序线程池。 该线程池将管理带注解的方法的调度调用。

#### 2.1. 以固定速率安排任务

在固定的速率执行任务：

```java
@Scheduled(initialDelay = 1000, fixedRate = 10000)
public void run() {
	logger.info("Current time is :: " + Calendar.getInstance().getTime());
}

```

现在，在控制台中观察输出：

```java
2017-03-08 15:02:55 - Current time is :: Wed Mar 08 15:02:55 IST 2017
2017-03-08 15:03:05 - Current time is :: Wed Mar 08 15:03:05 IST 2017
2017-03-08 15:03:15 - Current time is :: Wed Mar 08 15:03:15 IST 2017
2017-03-08 15:03:25 - Current time is :: Wed Mar 08 15:03:25 IST 2017
2017-03-08 15:03:35 - Current time is :: Wed Mar 08 15:03:35 IST 2017

```

#### 2.2. 固定延迟安排任务

将任务配置为在固定延迟后运行。 在给定的示例中，上一次执行的结束与下一次执行的开始之间的持续时间是固定的。 该任务始终等待直到上一个任务完成。

```java
@Scheduled(fixedDelay = 10000)
public void run() {
	logger.info("Current time is :: " + Calendar.getInstance().getTime());
}

```

#### 2.3. Spring Boot Cron 工作示例

`@Scheduled`注解非常灵活，也可以采用 **cron 表达式**。

```java
@Scheduled(cron = "0 10 10 10 * ?")
public void run() {
	logger.info("Current time is :: " + Calendar.getInstance().getTime());
}

```

在这个 Spring 任务调度程序注解示例中，向我提出您的问题。

学习愉快！