spring调度注解@Scheduled(含分布式)
@Scheduled
注解用于标记方法为计划任务,在 Spring 框架中用于定时任务。在使用 @Scheduled
时,你可以指定任务执行的频率。
在分布式环境下,如果你需要确保只有一个实例执行 @Scheduled
任务,你可以使用 @EnableScheduling
和 @Schedules
注解,并结合其他机制(如使用分布式锁)来保证只有一个实例执行计划任务。
以下是一个使用 @Scheduled
注解的例子:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduledTask {
@Scheduled(fixedRate = 5000) // 每5秒执行一次
public void performTask() {
// 任务内容
}
}
在分布式环境中使用 @Scheduled
时,确保只有一个实例执行任务的示例代码:
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class DistributedScheduledTask {
@Scheduled(fixedRate = 5000)
public void performTask() {
// 使用分布式锁确保只有一个实例执行任务
boolean isLocked = tryLock(); // 尝试获取分布式锁
if (isLocked) {
// 执行任务
doTask();
// 释放锁
releaseLock();
}
}
private boolean tryLock() {
// 实现分布式锁获取逻辑
// 返回是否获取锁的结果
}
private void doTask() {
// 执行实际的定时任务
}
private void releaseLock() {
// 实现分布式锁释放逻辑
}
}
在上述代码中,tryLock()
方法用于尝试获取分布式锁,如果获取成功,则执行任务并释放锁。这里的锁是抽象的,你需要根据实际的分布式环境实现具体的锁获取和释放逻辑。
评论已关闭