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

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

发布时间:2019-07-24 15:50:23 所属栏目:建站 来源:无知者云
导读:在我的工作中,我从零开始搭建了不少软件项目,其中包含了基础代码框架和持续集成基础设施等,这些内容在敏捷开发中通常被称为第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等的分布式锁实现机制。

统一代码风格

(编辑:核心网)

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

热点阅读