Spring Boot @Scheduled fixedDelay操作

时间:2019-01-26 14:46:48

标签: java spring-boot scheduling

我正在构建一个应用程序,它每隔'n'秒就会从数据库中读取一次数据..在我的@Scheduled方法中,我想从数据库中读取数据以配置@Scheduled任务。在每个时期阅读都是很重要的,因为它可以随时更改。 因此,当我从数据库表中读取数据“期间”时,我想将其访问到我的@Scheduled(fixedDelay = period)中。我的代码目前未使用读取的db值,而是在下面复制了我的代码。


代码:

@Scheduled(fixedDelay = 60000)
public void startSchedule() throws InterruptedException {

    //read data from db to configure Scheduling
    //equalize fixedDelay = db.getPeriod(); -> i am not able to do that...

    //do other fancy thing..

}

2 个答案:

答案 0 :(得分:0)

您可以在@Scheduled方法中创建一个新的调度程序。

ScheduledExecutorService executor = Executors.newScheduledThreadPool(4);
executor.scheduleWithFixedDelay(() => {
    // do your stuff
}, 0, delay, TimeUnit.SECONDS);

delay是您从数据库中读取的内容。

答案 1 :(得分:0)

这是什么问题?调度不起作用吗?您@EnableScheduling吗?可以,但不能与您的变量一起使用吗?

如果我正确理解,您将从数据库中读取一个变量,然后希望在该变量的延迟时间内安排一些时间。因此,您需要首先从数据库中读取数据,将其设置为变量delay,然后使用@Scheduled(fixedDelay = delay)调用另一个方法。