使用shedlock将spring schedule上锁


声明:本文转载自https://my.oschina.net/go4it/blog/1572509,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

本文讲述如何使用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

本文发表于2017年11月13日 10:36
(c)注:本文转载自https://my.oschina.net/go4it/blog/1572509,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2700 讨论 0 喜欢 1

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1