ShedLock 使用教程

ShedLock 使用教程

ShedLockDistributed lock for your scheduled tasks项目地址:https://gitcode.com/gh_mirrors/sh/ShedLock

项目介绍

ShedLock 是一个用于确保计划任务在分布式系统中只执行一次的库。它不是一个分布式调度器,而是一个简单的锁机制,用于防止任务在多个节点上并行执行。ShedLock 支持多种外部存储,如 MongoDB、JDBC 数据库、Redis、Hazelcast、ZooKeeper 等,用于协调不同节点上的任务执行。

项目快速启动

依赖引入

首先,在项目的 pom.xml 文件中添加 ShedLock 的依赖:

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>5.14.0</version>
</dependency>
<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-provider-jdbc-template</artifactId>
    <version>5.14.0</version>
</dependency>

配置 ShedLock

在 Spring Boot 项目中,配置 ShedLock 的锁提供者:

import net.javacrumbs.shedlock.core.LockProvider;
import net.javacrumbs.shedlock.provider.jdbc.JdbcTemplateLockProvider;
import net.javacrumbs.shedlock.spring.annotation.EnableSchedulerLock;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

import javax.sql.DataSource;

@Configuration
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "10m")
public class ShedLockConfig {

    @Bean
    public LockProvider lockProvider(DataSource dataSource) {
        return new JdbcTemplateLockProvider(dataSource);
    }
}

定义计划任务

使用 @SchedulerLock 注解来定义计划任务:

import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduledTasks {

    @Scheduled(cron = "0 0/15 * * * ?")
    @SchedulerLock(name = "scheduledTaskName", lockAtMostFor = "14m", lockAtLeastFor = "14m")
    public void scheduledTask() {
        // 任务逻辑
    }
}

应用案例和最佳实践

应用案例

假设我们有一个分布式系统,需要在每天的特定时间执行一次数据备份任务。使用 ShedLock 可以确保该任务在多个节点中只执行一次,避免重复备份。

最佳实践

  1. 选择合适的锁提供者:根据项目需求选择合适的锁提供者,如使用 Redis 作为锁提供者可以提高性能。
  2. 合理设置锁的持续时间:根据任务的执行时间合理设置 lockAtMostForlockAtLeastFor,确保任务不会因节点故障而无法释放锁。
  3. 监控锁的使用情况:通过日志或监控系统监控锁的使用情况,及时发现和解决锁相关的问题。

典型生态项目

ShedLock 可以与以下生态项目结合使用:

  1. Spring Boot:作为 Spring Boot 项目的计划任务锁机制。
  2. Hazelcast:作为分布式锁提供者,提供高性能的分布式锁服务。
  3. Redis:作为锁提供者,提供快速的锁服务。
  4. MongoDB:作为锁提供者,适用于需要持久化锁信息的项目。

通过结合这些生态项目,可以构建更加健壮和高效的分布式系统。

ShedLockDistributed lock for your scheduled tasks项目地址:https://gitcode.com/gh_mirrors/sh/ShedLock

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个简单的 ShedLock 结合 Spring Boot 使用的示例: 1. 添加依赖 在 `pom.xml` 文件中添加以下依赖: ```xml <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.23.0</version> </dependency> ``` 2. 配置数据库 在 `application.properties` 文件中配置数据库连接信息,例如: ``` spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=123456 ``` 3. 创建定时任务 在 Spring Boot 应用程序中创建一个定时任务,例如: ```java @Component public class MyTask { @Scheduled(cron = "0 0/5 * * * ?") @SchedulerLock(name = "myTask", lockAtMostFor = "5m", lockAtLeastFor = "1m") public void run() { // do something } } ``` 在这个例子中,我们创建了一个名为 `MyTask` 的定时任务。使用 `@Scheduled` 注解指定了任务的执行时间,同时使用 `@SchedulerLock` 注解指定了任务的锁定策略。其中,`name` 参数指定了任务的名称,`lockAtMostFor` 参数指定了任务最多可以被锁定的时间,`lockAtLeastFor` 参数指定了任务最少需要被锁定的时间。 4. 启用 ShedLock 在 Spring Boot 应用程序的启动类上添加 `@EnableSchedulerLock` 注解,例如: ```java @SpringBootApplication @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") public class MyApp { public static void main(String[] args) { SpringApplication.run(MyApp.class, args); } } ``` 在这个例子中,我们使用 `@EnableSchedulerLock` 注解启用了 ShedLock,并指定了默认的最大锁定时间为 30 秒。 5. 运行应用程序 运行 Spring Boot 应用程序,并查看日志信息。如果一切正常,你应该可以看到 ShedLock 所输出的日志信息,其中包括任务被锁定的时间信息等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林浪其Geneva

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值