Spring的@Scheduled 动态更新cron表达式
时间: 2023-08-25 20:09:26 浏览: 214
你可以使用`CronTrigger`类来动态更新`@Scheduled`注解中的cron表达式。首先,你需要定义一个`CronTriggerFactoryBean`实例,然后在需要动态更新cron表达式的地方使用它。
下面是一个示例代码:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
@Component
public class MyScheduledTask {
@Autowired
@Qualifier("myCronTriggerFactoryBean")
private CronTrigger cronTrigger;
@Scheduled(fixedDelay = 5000) // 每5秒执行一次
public void updateCronExpression() {
// 模拟从数据库或其他外部源获取动态的cron表达式
String cronExpression = getCronExpressionFromExternalSource();
// 更新cronTrigger的cron表达式
cronTrigger.setCronExpression(cronExpression);
}
@Scheduled(fixedDelay = 5000) // 每5秒执行一次
public void scheduledTask() {
// 执行定时任务逻辑
}
private String getCronExpressionFromExternalSource() {
// 从数据库或其他外部源获取cron表达式的逻辑
return "0 0/1 * * * ?"; // 每分钟执行一次
}
}
```
在上述示例中,我们定义了一个`MyScheduledTask`组件,其中包含两个定时任务方法。其中一个任务方法`updateCronExpression()`用于动态更新cron表达式,另一个任务方法`scheduledTask()`是实际的定时任务逻辑。
在`updateCronExpression()`方法中,你可以实现从数据库或其他外部源获取cron表达式的逻辑,然后通过`cronTrigger.setCronExpression(cronExpression)`更新`cronTrigger`的cron表达式。
请确保在Spring配置文件中定义`CronTriggerFactoryBean`并指定其id为`myCronTriggerFactoryBean`,以便注入到`MyScheduledTask`组件中。
阅读全文