Nacos更改配置导致AnnotationConfigApplicationContext has been closed

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

发生原因:

为了方便获取ApplicationContext,定义ApplicationContextUtil类存放applicationContext。

nacos server更改配置,触发RefreshEvent事件,RefreshEventListener接受到事件调用LegacyContextRefresher.refresh(),方法内部会调用updateEnvironment,然后有一段代码将老的applicationContext给关闭了,代码如下:

finally {
			ConfigurableApplicationContext closeable = capture;
			while (closeable != null) {
				try {
					closeable.close();
				}
				catch (Exception e) {
					// Ignore;
				}
				if (closeable.getParent() instanceof ConfigurableApplicationContext) {
					closeable = (ConfigurableApplicationContext) closeable.getParent();
				}
				else {
					break;
				}
			}
		}

导致其他地方调用ApplicationContextUtil.applicationContext.getBean()方法时,会报错context has been closed already。

解决办法:

定义ApplicationListener方法监听EnvironmentChangeEvent事件,然后将新的context替换老的context。

public class ApplicationContextRefreshListener implements ApplicationListener<Applicati
springboot热部署重启后报错容器有问题 我在run方法了,是用的SpringUtils.getBean(XXX.class);网上有说,容器关闭重启,SpringUtils.getBean还是获取以前的容器,所以报错,我真不太懂,希望大神们指点一下。//业务处理异步线程池,线程池参数可以根据您的业务特点调整,或者您也可以用其他异步方式处理接收到的消息。手动重启,一切正常。然后我写了个类,专门监听其它服务器推送过来的消息,进行数据库更新操作。这个时候就有问题了,当再监听到有消息来的时候,就报错了。若依的不分离版springboot项目,有热部署。. 阅读详情

相关推荐

AnnotationConfigEmbeddedWebApplicationContext@5f395ce1 has been closed already异常

项目运行之后使用tbscheudle扫描任务结果报异常,异常信息: java.lang.IllegalStateException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@5f395ce1 has been closed already at org.spri...

xucong996的博客 7794

解锁新技能《AnnotationConfigApplicationContext@7a8414ea has been closed already

}

OceanSky的专栏 1732

SpringCloud Alibaba Seata:ERROR io.seata.core.rpc.netty.NettyClientChannelManager - Failed to get av

SpringCloud Alibaba Seata:ERROR io.seata.core.rpc.netty.NettyClientChannelManager - Failed to get available servers: 2022-01-12 13:45:05.333 [timeoutChecker_1] ERROR io.seata.core.rpc.netty.NettyClientChannelManager - Failed to get available servers: org..

live的专栏 4995

解决 Spring Cloud 中 context has been closed already

context has been closed already 解决方案 报错代码 有这样一段代码,在运行中可能会发生 context has been closed already 错误,且一旦发生,以后每次运行到这必定出错。 @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext context = null; @O

qq_35425070的博客 1万+

springboot2.4+nettyWebServerApplicationContext@15f51c50 has been closed already问题解决

这里写自定义目录标题新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 springboot2.4+netty...

weixin_42460087的博客 5028

nacos+getbean的坏习惯 引发 AnnotationConfigApplicationContext has been closed

前言 每次nacos发布新的config的时候,接下来就会发生一个很诡异的情况,AnnotationConfigApplicationContext has been closed 过程 百度了一圈,有类似的问题,但是没有相关的解决方案;于是我就开始关注AnnotationConfigApplicationContext这个类,既然你说它管理了,说明我是哪里使用了,最后发现是因为我们使用了springutil.getbean,这个玩意就是用于不按照注解的方式去获取bean的过程;正常在main里面去run上

Leo.xie的博客 2052

org.springframework.context.annotation.AnnotationConfigApplicationContext has been closed already

Context has been closed already

Jack5201314_的博客 1930

context.annotation.AnnotationConfigApplicationContext@336fc927 has been closed already

java.lang.IllegalStateException: org.springframework.context.annotation.AnnotationConfigApplicationContext@336fc927 has been closed already 很奇怪的一个错误,重启可以重新初始化上下文,不报错。

刘滨浩的博客 4433

spring-boot源码解析之AnnotationConfigServletWebServerApplicationContext

org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext

weixin_45594127的博客 5991

一直在使用中的生产上的程序中突然抛出异常“Connection has already been closed.”

1、起因: 最简单的代码,没有框架,因为涉及到事务,做了一个Connection长连接,将此连接向下传递,直到事务结束;否则,回滚。。。事务处理中有一流程:要对文件自身查重,文件本身有5万条数据,耗时3~5分钟左右。文件自身查重结束后,进行数据库查重,,,数据库查重异常报错 public static Connection getConnection() { try { // D...

qq_37358143的博客 1万+

spring与rabbitMQ搭配一众问题及解决方案

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.clas

走错路的程序员 2524

奇葩问题配上一脸懵逼的解决方式

起因是这样的,昨天博主搬完砖,开始更新jar包了(通过jenkins构建),使用nohup启动时候,报了一个错 2019-04-02 13:30:45.656 WARN 7015 [stanceInfoReplicator-0] c.n.discovery.InstanceInfoReplicator - There was a problem with the instance info ...

liumengwei1的博客 1422

embedded.AnnotationConfigEmbeddedWeb ApplicationContext@1e67b872 has been closed already

nested exception is java.lang.IllegalStateException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWeb ApplicationContext@1e67b872 has been closed already at org.springfram...

3687

AnnotationConfigApplicationContext 报错 has not been refreshed yet

Caused by: java.lang.IllegalStateException: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@1dcca8d3 has not been refreshed yet 配置刷新报错

white_while的博客 6669

SpringBoot(十二)启动流程分析之创建应用上下文AnnotationConfigServletWebServerApplicationContext

SpringBoot版本:2.1.1 ==》启动流程分析汇总 接上篇博客Spring Boot 2.1.1(十一)启动流程分析之设置系统属性spring.beaninfo.ignore、自定义banner图 目录 流程分析 1、AbstractApplicationContext 2、GenericApplicationContext 2.1、DefaultListable...

yhahaha_的博客 3万+

org.springframework.context.annotation.AnnotationConfigApplicationContext@25a6944c has been closed

项目场景: springboot项目开发时,通过ApplicationRunner启动业务调用 问题描述: 程序没有关闭情况下,提示ApplicationContextClosed 原因分析: ApplicationRunner中业务代码运行在main线程中,即业务代码运行在spring容器初始化过程中,在运行中业务代码有throw RuntimeException,最外层捕获处理,直接就抛在了main线程中,由spring容器初始化过程捕获,导致ApplicationConTextClo

huster_2015的博客 1477
M 张
博客等级 码龄7年 0粉丝 1原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值