iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springboot2整合lettuce启动卡住问题的解决方法是什么
  • 881
分享到

springboot2整合lettuce启动卡住问题的解决方法是什么

2023-06-22 06:06:34 881人浏览 独家记忆
摘要

本篇文章给大家分享的是有关SpringBoot2整合lettuce启动卡住问题的解决方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前言EasyCache升级兼容 sp

本篇文章给大家分享的是有关SpringBoot2整合lettuce启动卡住问题的解决方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

前言

EasyCache升级兼容 springboot2,有个业务系统启动总是会卡住,最后抛出超时异常,如下:

java.util.concurrent.TimeoutException: nullat java.util.concurrent.FutureTask.get(FutureTask.java:205).....

springboot 版本是 2.2.x,SpringCloudVersion 版本是 2.2.x, lettuce版本是5.2.x,如果使用jedis客户端没有,所以问题一定是出在lettuce。

分析原因

如果是线上发生这个问题会使用 jstack 查看线程的情况,在本地idea调试就更加方便了,查看线程发现lettuce的线程被Blocked,dump出的部分信息如下:

"lettuce-kqueueEventLoop-7-1@14257" daemon prio=5 tid=0x4c nid=NA waiting for monitor entry

  java.lang.Thread.State: BLOCKED

 waiting for main@1 to release lock on <0x38a5> (a java.util.concurrent.ConcurrentHashMap)

  at org.springframework.beans.factory.support.DefaultSingletonBeanReGIStry.getSingleton(DefaultSingletonBeanRegistry.java:208)

  at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)

  ....

看第一行的报错是在获取Bean的时候阻塞了,说明有地方获取Bean的时候没有释放。在这地方打断点发现是 spring-cloud-sleuth 的 SamplerAutoConfiguration获取bean的时候有锁没有释放。源代码如下

protected static class RefreshScopedSamplerConfiguration {public Sampler defaultTraceSampler(SamplerProperties config) {return samplerFromProps(config);}}

@RefreshScope 获取代理类的时候如果是@PostConstruct的方法,bean是加载不到,所以导致一直没有释放锁。所以猜想,容器还没有启动完成的时候,有地方调用了lettuce的Bean,导致循环依赖。

坑的复现及解决办法

运行下面这段代码,错误就出现了,和业务系统出现的问题一模一样,也验证了上面的猜想。解决办法是在容器启动之后在调用init方法。(实测使用InitializingBean时也会出现该问题)

public class SpringDataTestService {    private StringRedisTemplate stringRedisTemplate;    //@EventListener(MainContextRefreshedEvent.class)    public void init() {        String s = stringRedisTemplate.opsForValue().get("gateway:ab-test:config");        System.out.println(s);    }}

以上就是springboot2整合lettuce启动卡住问题的解决方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: springboot2整合lettuce启动卡住问题的解决方法是什么

本文链接: https://www.lsjlt.com/news/302805.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作