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

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

林浪其Geneva

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

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

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

打赏作者

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

抵扣说明:

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

余额充值