Spring ShedLock 指南
1 概述
Spring 为定时任务提供了一个易于实现的 API。在没有部署应用程序的多个实例之前,它很有效。默认情况下,Spring 无法处理多个实例上的调度程序同步,而是在每个节点上同时执行作业。
在本篇教程中,我们将了解 ShedLock - Java 库,它确保我们的计划任务只能同时运行一次,并且可以代替 Quartz。
2 Maven 依赖
为了使用 Spring ShedLock,我们需要添加 shedlock-spring 依赖项:
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-spring</artifactId>
<version>2.2.0</version>
</dependency>
3 配置
注意,ShedLock 仅适用于具有共享数据库的环境。它在数据库中创建一个表或文档,用于存储有关当前锁的信息。
目前,ShedLock 支持 Mongo,Redis,Hazelcast,ZooKeeper 以及任何带有 JDBC 驱动程序的东西。
如下示例,我们将使用 PostgreSQL 数据库。为了使它工作,我们需要提供 ShedLock 的 JDBC 依赖:
<dependency>
<groupId>net.javacrumbs.shedlock</groupId>
<artifactId>shedlock-provider-jdbc-template</artifactId>
<version>2.1.0</version>
</dependency>
接下来,我们需要为 ShedLock 创建一个数据库表,以保留有关调度程序锁的信息:
CREATE TABLE shedlock(
name VARCHAR(64),
lock_until TIMESTAMP(3) NULL,
locked_at TIMESTAMP() ,
locked_by (),
(name)
);


