蒙诺戈
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