gpt4 book ai didi

java - 是否可以使用 Spring @Scheduled 注释安排作业每小时运行一次,但每次随机运行?

转载 作者:行者123 更新时间:2023-12-02 01:33:12 25 4
gpt4 key购买 nike

我想每小时运行我的任务/方法..但每次都是随机的分钟。我已经尝试过Spring @Scheduled to be started every day at a random minute between 4:00AM and 4:30AM但这个解决方案是设置随机初始值,但在同一分钟之后使用。

我希望实现作业像这样运行的情况。例如:

8:109:4110:12...

最佳答案

对,所以...这不是时间表。这是一个非确定性事件。

预定事件是可重复的并且可以在特定时间持续触发的事件。秩序和可预测性与此密切相关。

通过在给定时间触发作业,但不一定在给定分钟触发作业,您会失去可预测性,而这正是 @Scheduled 注释所强制执行的(不一定是)通过实现,但作为副作用;注释可能只包含编译时常量,不能在运行时动态更改)。

至于解决方案,Thread.sleep 很脆弱,会导致您的整个应用程序 hibernate 一段时间,而则不然你想做什么。相反,you could wrap your critical code in a non-blocking thread并安排它。

警告:下面的代码未经测试

@Scheduled(cron = "0 0 * * * ?")
public void executeStrangely() {
// Based on the schedule above,
// all schedule finalization should happen at minute 0.
// If the pool tries to execute at minute 0, there *might* be
// a race condition with the actual thread running this block.
// We do *not* include minute 0 for this reason.
Random random = new Random();
final int actualMinuteOfExecution = 1 + random.nextInt(59);
final ScheduledThreadPoolExecutor exec = new ScheduledThreadPoolExecutor(1);

exec.schedule(() -> {
// Critical code here
}, actualMinuteOfExecution, TimeUnit.MINUTES);
}

我将以线程安全的方式管理资源的工作留给读者作为练习。

关于java - 是否可以使用 Spring @Scheduled 注释安排作业每小时运行一次,但每次随机运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696973/

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