首页 > 编程知识 正文

定时任务分布式部署,分布式下的定时任务如何保证

时间:2023-05-03 05:46:47 阅读:13100 作者:728

蒙诺戈

DynamoDB

JDBC模板

ZooKeeper (using Curator )

redis (usingspringredisconnectionfactory )。

redis (使用jedis ) )。

Hazelcast

第一步是引入依赖

net.javacrumbs.shedlock

隐藏锁定- spring

4.11.1

net.javacrumbs.shedlock

shed lock-provider-JDBC-template

4.11.1

步骤2添加配置类

import net.Java crumbs.shed lock.core.lock提供程序; import net.Java crumbs.shed lock.provider.JDBC template.jdbctemplatelockprovider; importorg.spring帧work.context.annotation.bean; importorg.spring framework.context.annotation.configuration; importorg.spring framework.JDBC.core.JDBC模板; import javax.annotation.resource; importjavax.sql.DataSource; importjava.util.TimeZone; /*** @descrition shedlock设置类

* @ since 2021-01-1022:39 */@ configurationpublicclasshedlockconfig {

@ resourceprivatedatasourcedatasource;/* * @说明

* @ date 2021/1/1022336039 */@ beanpubliclockproviderlockprovider (({ returnnewjdbctemplatelockprovider ) () )

jdbctemplatelockprovider.configuration.builder (

. withjdbctemplate (newjdbctemplate (数据来源) ) ) ) ) ) ) ) )。

. with time zone (time zone.gettime zone (GMT8) )

. build () )

);

}

}

在第3步中,添加公共存储。 虽然shedlock表示它支持多个公共存储作为锁定,但本文以mysql为例

创建表表hedlock (

名称varchar (64 ) NOT NULL,

lock_untiltimestamp(3)非空值,

locked_attimestamp(3) notnulldefaultcurrent _ timestamp ) 3、

locked_byVarchar(255 ) NOT NULL,主密钥(name ) ) )。

);

步骤4,添加特定任务类

import lombok.extern.slf4j.slf4j; import net.Java crumbs.shed lock.spring.annotation.scheduler lock; importorg.spring帧. scheduling.annotation.scheduled; importorg.spring framework.stereotype.com ponent; 导入Java.text.simple date format; importjava.util.Date; /***@authorshane

* @ date 2021/1/102:39 */@ slf4j

@ componentpublicclasstestjob {/* * @ description每1min打印一次

* @ date 2021/1/102:39 */@ scheduled (cron=' 00/1 * * *? //lockAtMostFor用锁定的默认保留时间复盖启动类的默认保留时间

@schedulerlock(name='demo ',lockAtMostFor='70m ' )公共语音打印) throwsInterruptedException {

simpledateformatdf=newsimpledateformat (yyyy-mm-ddhh : mm : ss ); //设置日期格式

log.warn ('当前时间: ' df.format ) newdate ) );

}

}

现在,让我们复制代码,然后分别启动两个实例来查看结果

数据库记录

@SchedulerLock注释参数说明

name :计划任务的名称是数据库中的外键

lockAtMostFor :锁定的最大时间单位为毫秒

lockAtLeastFor :锁定的最小时间单位为毫秒

是的。 也有启动系统的构成

@SpringBootApplication

@ mappers can (com.example.test.mapper ) )。

@启用计划

@ enableschedulerlock (defaultlockatmostfor=' 10m ' ) /默认锁定的时间publicclasstestapplication { publicstaticvoidmain (stion )

spring application.run (test application.class,args );

}

}

资料来源: https://www.Jian Shu.com/p/941416645606

shedlock的github地址: https://github.com/lukas-krecan/shed lock

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。