加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

后端开拓实践系列——Spring Boot项目模板

发布时间:2019-07-27 00:34:53 所属栏目:建站 来源:无知者云
导读:在我的事变中,我从零开始搭建了不少软件项目,个中包括了基本代码框架和一连集成基本办法等,这些内容在火速开拓中凡是被称为第0个迭代要做的工作。可是,当项目运行了一段时刻之后再来反观,我总会发明一些不敷的处所,要么测试分类没有分好,要么根基的

然后设置Shedlock:

  1. @Configuration 
  2. @EnableSchedulerLock(defaultLockAtMostFor = "PT30S") 
  3. public class DistributedLockConfiguration { 
  4.  
  5.     @Bean 
  6.     public LockProvider lockProvider(DataSource dataSource) { 
  7.         return new JdbcTemplateLockProvider(dataSource); 
  8.     } 
  9.  
  10.  
  11.     @Bean 
  12.     public DistributedLockExecutor distributedLockExecutor(LockProvider lockProvider) { 
  13.         return new DistributedLockExecutor(lockProvider); 
  14.     } 
  15.  
  16.  

实现靠山使命处理赏罚:

  1. @Scheduled(cron = "0 0/1 * * * ?") 
  2.     @SchedulerLock(name = "scheduledTask", lockAtMostFor = THIRTY_MIN, lockAtLeastFor = ONE_MIN) 
  3.     public void run() { 
  4.         logger.info("Run scheduled task."); 
  5.     } 

为了支持代码直接挪用漫衍式锁,基于Shedlock的LockProvider建设DistributedLockExecutor:

  1. public class DistributedLockExecutor { 
  2.     private final LockProvider lockProvider; 
  3.  
  4.     public DistributedLockExecutor(LockProvider lockProvider) { 
  5.         this.lockProvider = lockProvider; 
  6.     } 
  7.  
  8.     public <T> T executeWithLock(Supplier<T> supplier, LockConfiguration configuration) { 
  9.         Optional<SimpleLock> lock = lockProvider.lock(configuration); 
  10.         if (!lock.isPresent()) { 
  11.             throw new LockAlreadyOccupiedException(configuration.getName()); 
  12.         } 
  13.  
  14.         try { 
  15.             return supplier.get(); 
  16.         } finally { 
  17.             lock.get().unlock(); 
  18.         } 
  19.     } 
  20.  

行使时在代码中直接挪用:

  1. public String doBusiness() { 
  2.         return distributedLockExecutor.executeWithLock(() -> "Hello World.", 
  3.                 new LockConfiguration("key", Instant.now().plusSeconds(60))); 
  4.     } 

本文的示例项目行使了基于JDBC的漫衍式锁,究竟上任何提供原子操纵的机制都可用于漫衍式锁,Shedlock还提供基于Redis、ZooKeeper和Hazelcast等的漫衍式锁实现机制。

同一代码气魄威风凛凛

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读