@scheduled用法
时间: 2025-01-08 10:12:34 浏览: 2
### Spring 中 `@Scheduled` 注解的使用
在 Spring 应用程序中,通过 `@Scheduled` 注解可以轻松实现定时任务的功能。为了使该功能生效,在主应用程序类上需添加 `@EnableScheduling` 注解来开启调度支持[^1]。
下面是一个完整的例子展示如何配置以及创建简单的定时任务:
#### 主应用启动类
```java
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
```
此段代码定义了一个标准的 Spring Boot 启动入口并启用了计划任务的支持。
#### 创建带有时效性的服务组件
接下来定义一个带有具体业务逻辑的服务组件,并在其内部的方法前加上 `@Scheduled` 来指定执行的时间间隔或其他触发条件:
```java
@Component
public class ScheduledTasks {
private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);
// 每隔5秒运行一次固定速率的任务
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
log.info("The time is now {}", new Date());
}
// 延迟3秒后开始每7秒重复一次的任务
@Scheduled(initialDelay = 3000, fixedRate = 7000)
public void delayedTask() {
log.info("Delayed task executed at {}", new Date());
}
// 使用cron表达式的复杂时间模式
@Scheduled(cron = "0 0 * * * ?")
public void scheduledTaskUsingCronExpression() {
log.info("This will run every hour on the hour");
}
}
```
上述示例展示了三种不同类型的定时策略:基于固定的频率(`fixedRate`)、先延迟再按周期循环(`initialDelay`, `fixedRate`) 和更复杂的 cron 表达式用于精确控制何时应该触发特定事件。
阅读全文