相关疑难解决方法(0)

使用Quartz在多个无状态应用服务器上安排单个作业

我在负载均衡器后面有一层相同的应用服务器.出于操作原因,我有一个约束,即两个应用服务器上的应用程序配置必须相同,以便可以轻松添加和删除节点.所有应用服务器共享同一个数据库.应用服务器不会/不会被群集.

到目前为止,这种方法运行良好,但现在我希望在一个应用服务器上执行预定的作业.所有应用服务器都将运行Quartz并具有相同的运行作业计划.触发器将在每个应用服务器上触发,但我希望只有一个应用服务器实际执行该作业 - 实际上它们都是竞争启动而且只有一个实际启动,其余的应用服务器只是忽略了该作业.这里的想法是,如果我们丢失一个应用服务器,另一个将运行该作业,如果我们添加新的应用服务器,他们将轮流运行作业.

我计划通过在数据库中创建一个"作业锁定"表来执行此操作,所有应用程序服务器在启动作业之前都会读取该表,并且只有在作业"解锁"时才会启动.首先对表进行更新的应用服务器将通过将表更新为运行状态/在作业结束时重置它来实质上阻止其他服务器.

在我构建之前,我很感激那些有更多石英经验的人的一些意见:

a)我可以将此行为挂钩到Quartz中,以便不必在每个作业的基础上完成吗?即开发人员可以添加新的工作而不必担心工作锁定,因为它被抽象掉了.

b)Quartz是否提供任何内置机制来实现类似于上面的内容,所以我不必自己滚动它?

谢谢!

java quartz-scheduler

21
推荐指数
1
解决办法
1万
查看次数

集群环境中的调度程序

我们的(Spring)应用程序包含几个Schedulers在夜间变为活动状态以更改/更新某些数据(来自Database)的应用程序Batch.

这一切都运行正常,问题是我们的应用程序很快就会运行了clustered environment.

什么是防止最好的选择schedulerinstance A,并instance B在同一时间做同样的工作?

**更新**
集群环境设置为'active-active'.
每个节点都与它自己的数据库实例进行通信.每个数据库实例都将replicate数据发送到其他实例.
数据库实例未设置为,'master-slave'但将Galera cluster在每个实例执行insert-update-delete操作的位置运行.

所以每个scheduler应该只在一个实例上运行一次.其他实例不应运行调度程序.所以我需要找到一个实例的调度程序运行的方法,其他实例的相同调度程序不应该运行.

spring scheduler galera

5
推荐指数
1
解决办法
3388
查看次数

集群环境中的Spring Scheduler

我正在使用使用@Scheduled批注的Spring Scheduler来调度运行文件生成服务的作业。该应用程序部署在群集环境中的tomcat的5个单独节点上,以实现负载平衡和故障转移。因此,服务计划了5次,这是意料之外的。有没有一种方法可以将调度程序配置为仅在当前节点上运行?

有一个使用数据库找出当前活着节点和调用调度该特定实例的方法在这里

另一种方法是使用石英调度程序

由于我无法对已部署的应用程序进行重大更改,因此有解决此问题的简单方法吗?请指教。

java spring scheduler cluster-computing

3
推荐指数
1
解决办法
6493
查看次数

多个实例上的Spring和计划任务

我们有一个Spring Boot应用程序,并有计划的任务。

我们希望将应用程序部署在多台服务器上,因此将有多个应用程序实例。

如何配置Spring以仅在指定的服务器上运行计划的任务?

jobs spring job-scheduling spring-boot

2
推荐指数
3
解决办法
5780
查看次数