使用shedlock将spring schedule上锁
序
本文讲述如何使用shedlock给spring schedule上锁,保证集群内部调度任务不会重复执行,避免资源浪费。
maven
<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>0.16.1</version> </dependency> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-provider-jdbc-template</artifactId> <version>0.16.1</version> </dependency>
shedlock提供了mongo、redis、zookeeper、jdbc等的锁实现,这里使用jdbc。
shedlock配置
@Configuration @EnableScheduling public class ShedlockConfig { @Bean public LockProvider lockProvider(DataSource dataSource) { return new JdbcTemplateLockProvider(dataSource); } @Bean public ScheduledLockConfiguration scheduledLockConfiguration(LockProvider lockProvider) { return ScheduledLockConfigurationBuilder .withLockProvider(lockProvider) .withPoolSize(10) .withDefaultLockAtMostFor(Duration.ofMinutes(10)) .build(); } }
这里使用了jdbc的lock provider,同时设定默认最大的lock expire时间为10分钟
shedlock表
CREATE TABLE shedlock( name VARCHAR(64), lock_until TIMESTAMP(3) NULL, locked_at TIMESTAMP(3) NULL, locked_by VARCHAR(255), PRIMARY KEY (name) )
这个需要手工建立,不过可以优化一下,自动建表。
实例
@Scheduled(fixedDelay = 10*1000 /**ms**/,initialDelay = 10*1000) @SchedulerLock(name = "demoLockTask", lockAtMostFor = 5*1000) public void checkTask(){ LOGGER.error("checkTask executed"); }
doc
原文地址:https://my.oschina.net/go4it/blog/1572509
相关推荐
-
实现 Java 本地缓存,该从这几点开始 Java基础
2019-9-18
-
java之网络爬虫介绍 Java基础
2019-5-18
-
【JVM】垃圾回收器总结(2)——七种垃圾回收器类型 Java基础
2020-7-4
-
Vue – 我对UI框架的一些想法 Java基础
2020-5-29
-
「造个轮子」——cicada 设计一个配置模块 Java基础
2019-5-20
-
函数和数组(妈妈再也不用担心我的函数) Java基础
2019-7-24
-
Java匹马行天下之JavaSE核心技术——异常处理 Java基础
2020-6-13
-
AOP 那点事儿 Java基础
2018-3-26
-
彻底搞懂Android事件分发机制 Java基础
2019-8-16
-
Java 在Excel单元格中应用一种/多种字体样式 Java基础
2020-6-13