gpt4 book ai didi

java - 触发@Scheduled方法

转载 作者:行者123 更新时间:2023-11-30 02:40:01 30 4
gpt4 key购买 nike

我使用 Spring 的调度程序 (@EnableScheduling) 并具有以下 @Scheduled 方法,该方法每分钟调用一次:

@Component 
public class ScheduledTask {

@Scheduled(fixedRate = 60*1000)
public void run() {
// ...

现在我希望能够根据需要从代码中的另一个位置触发调度程序运行。

我可以注入(inject) ScheduledTask 并只需调用 run 方法。不过,我想确保在任何给定时间只有一个线程运行 run 方法。换句话说,如果调度程序当前正在运行 run 我希望忽略该调用。

我还想异步调用 run,但这可以通过使用 @EnableAsync@Async 轻松解决。

Spring有什么功能可以用在这个场景吗?

最佳答案

截至评论已编辑:

只需使用 AtomicBoolean 即可。

@Component 
public class ScheduledTask {

private AtomicBoolean isRunning = new AtomicBoolean(false);

@Scheduled(fixedRate = 60*1000)
public void run() {
if (isRunning.compareAndSet(false, true)) {

// ... do your things

//whenever you are done
isRunning.set(false);
}

我认为 Spring 中没有比这更简单的东西了。这没有任何意义,因为它实际上是一个标志。

编辑:

如果您想在应用程序的多个位置使用它,请考虑使用嵌入的信号量或原子 boolean 值来实现您自己的注释。

关于java - 触发@Scheduled方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42038803/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com