spring cloud gateway openfeign 联合使用产生死锁问题

spring cloud gateway openfeign 联合使用产生死锁问题,应用启动的时候阻塞卡住。

spring.cloud 版本如下

复制代码
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>2020.0.4</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
复制代码
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
复制代码
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

java启动代码

java 复制代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

}

##追溯源码发现 boundedElastic-1线程阻塞在getSingleton方法synchronized (this.singletonObjects)锁上

那这时候主线程是否启动应用完成了呢?答案是没有,主线程也在实例化单例bean路上。追溯源码。主线程也在getSingleton方法synchronized (this.singletonObjects)锁上获取bean,boundedElastic-1线程正是主线程发起的,主线程在这里等待返回。boundedElastic-1线程在等待synchronized (this.singletonObjects)锁释放,主线程在getSingleton方法等待boundedElastic-1线程返回结果, 由此死锁产生了。应用启动阻塞卡住了。

##boundedElastic-1线程产生过程,贴几个重要方法

spring event 事件 onApplicationEvent(ApplicationEvent event)

routeLocator.ifAvailable(locator -> locator.getRoutes().blockLast()); blockLast方法是阻塞的。导致此bug主要原因。

##线程名字

##工厂生产线程

相关推荐
小鸡脚来咯13 分钟前
Redis与MySQL双写一致性(实战解决方案)
spring·oracle·mybatis
老华带你飞44 分钟前
物流信息管理|基于springboot 物流信息管理系统(源码+数据库+文档)
数据库·vue.js·spring boot
我是小妖怪,潇洒又自在1 小时前
springcloud alibaba(九)Nacos Config服务配置
后端·spring·spring cloud
qq_12498707532 小时前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计
大学生资源网2 小时前
java毕业设计之“知语”花卉销售网站的设计与实现源码(源代码+文档)
java·mysql·毕业设计·源码·springboot
小鸡脚来咯3 小时前
Redis三大问题:穿透、击穿、雪崩(实战解析)
java·spring·mybatis
桦说编程3 小时前
并发编程高级技巧:运行时检测死锁,告别死锁焦虑
java·后端·性能优化
jiayong233 小时前
Spring AI Alibaba 深度解析(三):实战示例与最佳实践
java·人工智能·spring
梁同学与Android3 小时前
Android ---【经验篇】ArrayList vs CopyOnWriteArrayList 核心区别,怎么选择?
android·java·开发语言
ss2733 小时前
从零实现线程池:自定义线程池的工作线程设计与实现
java·开发语言·jvm