调度作业在集群上执行两次

发布于 2024-11-06 07:45:55 字数 107 浏览 2 评论 0原文

我们使用 Cron4j java 调度程序来调度每晚执行的作业。现在,当在客户端站点的集群(2 个节点)上部署(Tomcat)相同的 Web 应用程序时,作业会运行两次。有什么办法可以避免这个问题吗?

We are using Cron4j java scheduler for scheduling jobs which execute every night. Now, when this same web application is deployed(Tomcat) on cluster(2 nodes) at the client's site the jobs run twice. Is there any way to avoid this problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

鸩远一方 2024-11-13 07:45:55

我相信做到这一点的唯一方法是使用一些外部共享状态(例如在数据库中)来提供一些锁定。

I believe the only way of doing this would be to use some external shared state, like in a database for example, to provide some locking.

梦萦几度 2024-11-13 07:45:55

使用 Shedlock 库,非常简单

@Scheduled(...)
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {

}

Use Shedlock library, it's very simple

@Scheduled(...)
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {

}
傾旎 2024-11-13 07:45:55

解决这个问题的方法之一是让您的 Web 应用程序接受一个参数,例如 runCronjobs。您可以将相关条目放入 web.xml 或其他配置文件中。

因此,一个 Web 应用程序会将此值设置为 true,而其他部署会将其设置为 false

One of the ways to solve it would be to make your webapp to accept a parameter, e.g. runCronjobs. You could put relevant entry in web.xml or in some other configuration file.

So one webapp would have this value set to true and other deployments would have it set to false.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文