SpringBoot - 四种常见定时器
在Spring Boot中,常用的四种定时任务可以通过以下方式实现:
- 使用
@Scheduled
注解创建定时任务 - 使用
TaskScheduler
接口 - 使用
ScheduledTaskRegistrar
- 使用
@EnableScheduling
和@Schedules
注解
以下是每种方法的示例代码:
- 使用
@Scheduled
注解创建定时任务:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
// 定时任务的逻辑
System.out.println("Fixed rate task - 执行时间:" + System.currentTimeMillis());
}
}
- 使用
TaskScheduler
接口:
import org.springframework.scheduling.TaskScheduler;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class TaskSchedulerTask {
@Resource
private TaskScheduler taskScheduler;
public void startTask() {
taskScheduler.schedule(() -> {
// 定时任务的逻辑
System.out.println("TaskScheduler task - 执行时间:" + System.currentTimeMillis());
}, trigger);
}
}
- 使用
ScheduledTaskRegistrar
:
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
@Configuration
public class ScheduledConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
taskRegistrar.addTriggerTask(() -> {
// 定时任务的逻辑
System.out.println("ScheduledTaskRegistrar task - 执行时间:" + System.currentTimeMillis());
}, trigger);
}
@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(5);
}
}
- 使用
@EnableScheduling
和@Schedules
注解:
import org.springframework.scheduling.annotation.Schedules;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class MultipleSchedules {
@Scheduled(fixedRate = 5000)
public void fixedRateTask() {
// 定时任务的逻辑
System.out.println("Fixed rate task - 执行时间:" + System.currentTimeMillis());
}
@Schedules({
@Scheduled(fixedDelay = 5000),
@Scheduled(cron = "0 0/1 * * * ?")
})
public void multi
评论已关闭