然后设置Shedlock:
- @Configuration
- @EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
- public class DistributedLockConfiguration {
-
- @Bean
- public LockProvider lockProvider(DataSource dataSource) {
- return new JdbcTemplateLockProvider(dataSource);
- }
-
-
- @Bean
- public DistributedLockExecutor distributedLockExecutor(LockProvider lockProvider) {
- return new DistributedLockExecutor(lockProvider);
- }
-
-
- }
实现靠山使命处理赏罚:
- @Scheduled(cron = "0 0/1 * * * ?")
- @SchedulerLock(name = "scheduledTask", lockAtMostFor = THIRTY_MIN, lockAtLeastFor = ONE_MIN)
- public void run() {
- logger.info("Run scheduled task.");
- }
为了支持代码直接挪用漫衍式锁,基于Shedlock的LockProvider建设DistributedLockExecutor:
- public class DistributedLockExecutor {
- private final LockProvider lockProvider;
-
- public DistributedLockExecutor(LockProvider lockProvider) {
- this.lockProvider = lockProvider;
- }
-
- public <T> T executeWithLock(Supplier<T> supplier, LockConfiguration configuration) {
- Optional<SimpleLock> lock = lockProvider.lock(configuration);
- if (!lock.isPresent()) {
- throw new LockAlreadyOccupiedException(configuration.getName());
- }
-
- try {
- return supplier.get();
- } finally {
- lock.get().unlock();
- }
- }
-
- }
行使时在代码中直接挪用:
- public String doBusiness() {
- return distributedLockExecutor.executeWithLock(() -> "Hello World.",
- new LockConfiguration("key", Instant.now().plusSeconds(60)));
- }
本文的示例项目行使了基于JDBC的漫衍式锁,究竟上任何提供原子操纵的机制都可用于漫衍式锁,Shedlock还提供基于Redis、ZooKeeper和Hazelcast等的漫衍式锁实现机制。
同一代码气魄威风凛凛 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|