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

发布时间:2021-06-29 11:43:58 作者:chen
来源:亿速云 阅读:650

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

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定时器导致并发问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 定时器更新schedule/update的方法是什么
  2. scrapyd schedule.json setting 传入多个值问题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring boot

上一篇:CSS3如何模拟IOS实现滑动开关效果

下一篇:如何使用CSS3实现折角效果

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》