package com.yg.schedule.service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
* @Author suolong
* @Date 2022/3/21 14:14
* @Version 1.0
*/
@Service
@EnableScheduling
@Slf4j
public class ScheduleService {
@Scheduled(fixedDelay = 1*1000) //毫秒为单位,该函数全部完成之后,暂停一秒开始执行第二次
public void fixedDelayTest(){
log.info("FixedDelay test");
}
@Scheduled(fixedRate = 1*1000) //毫秒为单位,调用一次函数,马上开始计时一秒,然后执行第二次
public void fixedRateTest(){
log.info("FixedRate test");
}
//cron语法:[秒] [分] [小时] [日] [月] [周] [年]
//每隔一秒执行一次
@Scheduled(cron = "0/1 * * * * *")
public void cronTest(){
log.info("Cron test");
}
}
注解schedule的使用
需积分: 0 26 浏览量
更新于2022-03-21
收藏 63KB 7Z 举报
在Java编程领域,`@Scheduled`注解是Spring框架中用于实现定时任务的重要工具,它允许开发者无需直接操作线程池或使用繁琐的定时器API就能轻松创建周期性任务。这个注解通常与Spring的`TaskScheduler`或者`ScheduledExecutorService`一起工作,为应用程序添加了强大的后台任务执行能力。
`@Scheduled`注解可以应用到方法上,表示该方法将在预定的时间点或按照预定的周期执行。以下是一些关键点:
1. **注解使用**:在Spring配置类中启用定时任务支持,通过`@EnableScheduling`注解。这会启动一个后台任务调度器,定期检查是否有方法需要运行。
```java
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;
@EnableScheduling
@Component
public class AppConfig {
// ...
}
```
2. **注解参数**:`@Scheduled`注解有多个参数,如`fixedRate`、`fixedDelay`、`cron`等,用于定义不同的调度策略。
- `fixedRate`:表示前一次任务执行结束到下一次任务开始之间的间隔时间,单位为毫秒。
- `fixedDelay`:表示前一次任务执行完成后到下一次任务开始之间的间隔时间,也以毫秒为单位。注意,这里是从任务结束到下次任务开始计算的,而不是任务之间。
- `cron`:使用Cron表达式定义任务执行时间,这是一种灵活的定时表达方式,可以表示复杂的定时规则,如每天的某个时间点。
```java
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTasks {
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("Current time is " + new Date());
}
@Scheduled(cron = "0 0 12 * * ?")
public void dailyJob() {
System.out.println("This job runs every day at 12:00 PM");
}
}
```
3. **异步任务**:如果你希望定时任务在单独的线程中执行,可以使用`@Async`注解结合`@Scheduled`。
4. **暂停和恢复任务**:Spring提供了`Scheduler`接口,可以通过它来暂停或恢复特定的任务。
5. **配置调整**:在生产环境中,可能需要根据服务器负载动态调整定时任务的频率或时间,这可以通过Spring的`TaskScheduler`或`ScheduledExecutorService`的配置实现。
6. **异常处理**:当定时任务抛出异常时,Spring默认会停止执行该任务。可以通过自定义异常处理器来处理这些异常并决定是否继续执行。
7. **测试定时任务**:在单元测试中,可以使用`TestScheduler`模拟时间流,以便更好地测试定时任务的行为。
8. **多任务调度**:一个类中可以有多个`@Scheduled`注解的方法,每个方法都可以独立设置执行计划。
总结起来,`@Scheduled`注解极大地简化了Java应用中的定时任务开发,通过合理的配置和使用,可以高效地管理后台任务,提升系统的自动化程度和响应能力。正确理解和应用这些知识点,能帮助开发者构建出更加健壮和灵活的系统。