多个服务器实例上的调度程序

Scheduler on multiple server instances

您好,我有 Java 调度程序,每小时 运行,我有 16 个服务器实例,这将部署在所有 16 个服务器实例中。 我如何确保这些调度程序任务不会相互冲突。我们不想引入 Spring 批处理 .

其实还是有一些办法的

  1. 你可以使用分布式锁(例如:hazelcast 的分布式锁)。

  2. 你可以在数据库中使用悲观锁。(为每个请求锁定table并将状态设置为IN_PROGRESS)

  3. 使用quartz进行调度。(需要Db持久化)

基本上你可以遵循两种方法:

  1. 确保每个实例都管理自己的数据(不与任何其他实例共享)。
  2. 确保每次只有一个实例可以访问信息。

第一点取决于您自己的业务逻辑,对于第二点,有一些工具可以帮助您,可以轻松集成 Spring:

Shedlock(比 Quartz 更简单,但功能较少)