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主要原因。

##线程名字

##工厂生产线程

相关推荐
okseekw9 小时前
Java 字符串三巨头:String、StringBuilder、StringJoiner —— 初学者避坑指南 🤯
java
q***06479 小时前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
毕设源码余学姐9 小时前
计算机毕设 java 中医药药材分类采购网站 SSM 框架药材交易平台 Java 开发的分类采购与订单管理系统
java·开发语言·课程设计
BD_Marathon9 小时前
【JUC】并发与并行
java
okseekw9 小时前
Java String类详解:不可变性、创建方式与比较方法
java
q***64979 小时前
Spring Boot 各种事务操作实战(自动回滚、手动回滚、部分回滚)
java·数据库·spring boot
降临-max10 小时前
JavaSE---网络编程
java·开发语言·网络·笔记·学习
带刺的坐椅10 小时前
Solon AI 开发学习5 - chat - 支持哪些模型?及方言定制
java·ai·openai·solon
悟空码字10 小时前
单点登录:一次登录,全网通行
java·后端
傻啦嘿哟10 小时前
物流爬虫实战:某丰快递信息实时追踪技术全解析
java·开发语言·数据库