网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

springboot怎么解决多个deploy执行schedule定时器导致并发问题

这篇文章主要讲解了“springboot怎么解决多个deploy执行schedule定时器导致并发问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot怎么解决多个deploy执行schedule定时器导致并发问题”吧!

专注于为中小企业提供网站设计制作、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业岱岳免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上1000+企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

springboot部署多个相同服务deploy,当服务中有定时器时,一旦定时器触发时服务会同时执行,从而产生并发问题。解决方案:

1.在定时器类添加@Profile 注解 指定实例执行定时器。

@Component
@Configuration
@EnableScheduling   // 1.开启定时任务
@Profile("deploy01")
public class ScheduleTaskService {

....
}

它操作简单,灵活。只需要添加@Profile注解,但它的局限性也很明显,只有指定服务为deploy01时才会加载定时器处理类,一旦deploy01 挂掉或者未启动就无法执行。所以并不能达到高可用。

2.利用redis 缓存机制

   @Scheduled(cron = "0 0 0/1 * * ? ")  //每1小时执行一次
    public void insertPriRecoverCall() throws InterruptedException {
        String deployKey="deployName";
        redisService.set(deployKey,deployId,1,TimeUnit.HOURS);
        Object o = redisService.get(deployKey);
        if (o!=null){
            String deployName = o.toString();
            if (deployId.equals(deployName)){
                logger.info(deployName+" is running .....");
                ////业务代码  
          }
        }
    }

先获取服务实例Id,缓存到redis中。redis 是key-value 键值对的缓存机制。在相同key下只会保留一个deployId ,再取出缓存中deployId和服务实例id 比较。相同就继续执行业务代码,不同则直接过滤。这样既可以防止并发问题,又可以实现高可用。

感谢各位的阅读,以上就是“springboot怎么解决多个deploy执行schedule定时器导致并发问题”的内容了,经过本文的学习后,相信大家对springboot怎么解决多个deploy执行schedule定时器导致并发问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享文章:springboot怎么解决多个deploy执行schedule定时器导致并发问题
文章源于:http://bjjierui.cn/article/jhdoop.html

其他资讯