我使用Spring调度程序,使用@调度注释来调度运行文件生成服务的作业。应用程序部署在集群环境中Tomcat的5个单独节点上,用于负载平衡和故障转移。正因为如此,服务被调度了5次,这是不可能的。有没有办法将调度程序配置为仅在当前节点上运行?
有一种方法使用数据库找出当前活动节点,并在这里调用该特定实例的调度器
另一种方法是使用石英调度器
由于我无法对部署的应用程序进行重大更改,是否有简单的解决方案?请告知。
您还可以使用 dlock 在多个节点上仅执行一次计划任务。您可以简单地执行以下操作。
@Scheduled(cron = "30 30 3 * * *")
@TryLock(name = "jobLock", owner = SERVER_NAME, lockFor = THREE_MINUTES)
public void runJobsOnce() {
List<Job> jobs = jobService.getJobs();
for(Job job: jobs){
runJob(job);
}
}
请参阅有关使用它的文章。
您可以使用ShedLock项目。您只需注释执行时应锁定的任务
@Scheduled( ... )
@SchedulerLock(name = "scheduledTaskName")
public void scheduledTask() {
// do something
}
配置 Spring 和 LockProvider(目前支持 SQL 和 Mongo)
@Bean
public TaskScheduler taskScheduler(LockProvider lockProvider) {
return SpringLockableTaskSchedulerFactory
.newLockableTaskScheduler(poolSize, lockProvider);
}
问题内容: 将Singleton对象重构到集群环境的最佳策略是什么? 我们使用Singleton从数据库中缓存一些自定义信息。它 主要是 只读的,但是在发生某些特定事件时会刷新。 现在,我们的应用程序需要部署在集群环境中。根据定义,每个JVM将具有自己的Singleton实例。因此,当在单个节点上发生刷新事件并且刷新其缓存时,JVM之间的缓存可能不同步。 保持缓存同步的最佳方法是什么? 谢谢。 编
目前Cloud-ML生态云只有武清集群。这个集群的基本配置如下: 武清集群 集群目前包括若干台CPU和GPU节点。 集群的Endpoint为:https://cnbj2.cloudml.api.xiaomi.com
我们的(Spring)应用程序包含几个,这些调度器在夜间活动,以更改/更新中的一些数据(来自 )。 这一切都运行良好,问题是我们的应用程序很快就会在运行。 防止< code >实例A和< code >实例B的< code >调度程序同时执行相同工作的最佳选项是什么? **UPDATE** 群集环境设置为。 每个节点都与自己的数据库实例通信。每个数据库实例将数据复制到其他实例。 DB-实例不是设置为
一、集群规划 这里搭建一个 3 节点的 HBase 集群,其中三台主机上均为 Regin Server。同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop002 上部署备用的 Master 服务。Master 服务由 Zookeeper 集群进行协调管理,如果主 Master 不可用,则备用 Master 会成为新的主 Master。 二、前置条件
一、集群规划 这里搭建一个 3 节点的 Storm 集群:三台主机上均部署 Supervisor 和 LogViewer 服务。同时为了保证高可用,除了在 hadoop001 上部署主 Nimbus 服务外,还在 hadoop002 上部署备用的 Nimbus 服务。Nimbus 服务由 Zookeeper 集群进行协调管理,如果主 Nimbus 不可用,则备用 Nimbus 会成为新的主 Nim
一、集群规划 这里搭建一个 3 节点的 Hadoop 集群,其中三台主机均部署 DataNode 和 NodeManager 服务,但只有 hadoop001 上部署 NameNode 和 ResourceManager 服务。 二、前置条件 Hadoop 的运行依赖 JDK,需要预先安装。其安装步骤单独整理至: Linux 下 JDK 的安装 三、配置免密登录 3.1 生成密匙 在每台主机上使用