SpringBoot配置ShedLock分布式定时任务

Spring Boot 配置 ShedLock 分布式定时任务教程

简介

ShedLock是一个轻量级的Java库,支持分布式锁和分布式定时任务。它的目标是使定时任务在分布式环境中更可靠和可重复性。

步骤 1:添加依赖

首先,你需要在你的 pom.xml 文件中添加 ShedLock 的依赖:

<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>2.6.0</version>
</dependency>

步骤 2:配置ShedLock

在 Spring Boot 中,你可以配置 ShedLock 的许多选项。这里,我们将使用最简单的默认配置。只需在 application.yml 中添加以下配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_db
    username: your_username
    password: your_password
  jpa:
    database-platform: org.hibernate.dialect.MySQL5Dialect
    hibernate:
      ddl-auto: none
  # Enable ShedLock
  # 1. Enable auto-configuration
  autoconfigure:
    lock:
      provider: zookeeper # or etcd
  # 2. Set Zookeeper connection string
  shedlock:
    zookeeper:
      connectionString: localhost:2181

其中,你需要设置数据源的 URL、用户名和密码,以及 ShedLock 与 Zookeeper 的连接字符串。

步骤 3:编写定时任务

下面,我们将创建一个简单的 Java 类,用于编写定时任务:

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

@Component
public class ScheduledTasks {

    // This task runs every minute
    @Scheduled(cron = "0 * * * * *")
    @SchedulerLock(name = "myTaskName")
    public void checkAndUpdateData() {
        // Your task code goes here
        System.out.println("Task executed at: " + new java.util.Date());
    }
}

这里,我们使用了 @Scheduled 注释来设置任务的计划执行时间。同时,我们还使用了 @SchedulerLock 注释来指示该任务应该被 ShedLock 锁定。这可以确保在分布式环境中,同一任务不会同时运行。

步骤 4:测试定时任务

为了测试我们编写的定时任务,你可以使用以下命令启动应用程序:mvn spring-boot:run

当应用启动后,你可以在应用控制台上看到定时任务的输出。

示例 1:Zookeeper 配置示例

在这个示例中,我们将使用 Zookeeper 作为 ShedLock 的提供者。因此,我们需要配置 Zookeeper 的连接字符串,您可以在 application.yml 中添加以下配置:

spring:
  # Enable ShedLock
  autoconfigure:
    lock:
      provider: zookeeper
  # Set Zookeeper connection string
  shedlock:
    zookeeper:
      connectionString: localhost:2181

示例 2:Etcd 配置示例

在此示例中,我们将使用 etcd 作为 ShedLock 的提供者。因此,我们需要在 application.yml 中添加以下配置:

spring:
  # Enable ShedLock
  autoconfigure:
    lock:
      provider: etcd
  # Set etcd endpoint
  shedlock:
    etcd:
      endpoints:
        - http://localhost:2379

注意,在这个示例中,我们需要在本地运行 etcd 服务器,直接使用官方的 Docker 镜像即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot配置ShedLock分布式定时任务 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • docker 运行 redis 并指定配置文件

      1、上传配置文件到服务器。目录如下 2、 swt@ubuntu-swt:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3、运行容器 sudo docker run -d -v /home/swt/redis/:/data -p 6379:6379 redis…

    Redis 2023年4月13日
    00
  • Redis Eval Script

    简介 从Redis 2.6 版本开始,内嵌支持 Lua 环境。通过使用EVAL或EVALSHA命令可以使用 Lua 解释器来执行脚本。 EVAL和EVALSHA的使用是差不多的(下面有讲区别)。 EVAL命令 语法: EVAL script numkeys key [key …] arg [arg …] 。 script:Lua脚本 。numkeys…

    Redis 2023年4月13日
    00
  • 浅谈三种数据库的 SQL 注入

    浅谈三种数据库的 SQL 注入攻略 SQL 注入原理 SQL 注入是一种常见的攻击方式,原理是通过输入恶意的 SQL 代码,诱导应用程序执行非预期的操作。攻击者可以利用这个漏洞查看、修改、删除数据库中的数据。该漏洞通常由于应用程序在处理用户输入时未能过滤输入内容或者对用户输入进行充分验证而产生。 常见的数据库类型 MySQL MySQL 是一种关系型数据库,…

    database 2023年5月18日
    00
  • sql查询一个数组中是否包含某个内容find_in_set问题

    如果要在SQL中查询一个数组或逗号分隔的字符串中是否包含指定内容,可以使用MySQL提供的函数 FIND_IN_SET()。这个函数接受两个参数:被查询内容和字符串列表,返回一个表示查询结果的数字。如果存在则返回内容在列表中的位置,否则返回0。 下面是一个示例,假设我们有一个表 students ,其中有一个字段 languages 存储了每个学生擅长的语言…

    database 2023年5月21日
    00
  • Oracle动态交叉表生成

    有关于“Oracle动态交叉表生成”的完整攻略,下面是具体的讲解。 什么是Oracle动态交叉表? 在Oracle中,交叉表也称为“Pivot table”,它能够将表格数据从行展示为列,以便更好地进行分析和处理。而动态交叉表则表示交叉表的列数是不确定的,它通过动态生成列来存储数据,这些列名通常要根据数据的内容来生成。 Oracle动态交叉表生成流程 动态交…

    database 2023年5月21日
    00
  • 详解Spring中的Transactional属性

    详解Spring中的Transactional属性 在Spring框架中,事务管理是非常重要且常用的一个功能。而@Transactional属性是管理事务的重要属性之一。本文将详细讲解@Transactional属性,并提供一些示例来解释常见的用途。 什么是@Transactional属性? @Transactional属性用于指定带有事务性质的方法。它可以…

    database 2023年5月21日
    00
  • MySQL的时间差函数TIMESTAMPDIFF、DATEDIFF的用法

    让我来详细讲解一下MySQL的时间差函数TIMESTAMPDIFF、DATEDIFF的用法。 TIMESTAMPDIFF函数 语法: TIMESTAMPDIFF(unit, datetime1, datetime2) 其中,unit表示时间单位,datetime1和datetime2分别表示两个时间。函数的返回值表示两个时间之间的差值。 参数解释: unit…

    database 2023年5月22日
    00
  • 云数据库 Redis 版

    视频简介 云数据库 Redis 版是一项易于部署和管理的按需数据库服务,与 Redis 协议兼容。云数据库 Redis 版通过从内存缓存中检索数据而提供高速数据读写功能,并通过同时使用内存和硬盘存储而确保数据持久性 — 特别适合于要求高性能的 Web 应用。 云数据库 Redis 版的 Key-Value 型存储服务支持多种数据类型,如字符串、列表、集合、有…

    Redis 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部