Spring Boot整合Nacos时遇到 java.lang.IllegalStateException: Context has been already given a name 的解决办法
问题概述
在进行项目开发过程中,通过Spring Boot整合Alibaba Nacos的服务注册与发现和配置中心时,遇到个梗,启动时打印出一串错误日志信息 “ Failed to rename context [logback] as [nacos] java.lang.IllegalStateException: Context has been already given a name ” ,但是不会影响项目的正常运行和使用,
如下图:
具体错误信息如下:
2021-04-21 18:03:57.947 INFO [main]s.d.s.web.PropertySourcedRequestMappingHandlerMapping.initHandlerMethods:69 -Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2021-04-21 18:03:57.982 INFO [main]o.s.scheduling.concurrent.ThreadPoolTaskExecutor.initialize:181 -Initializing ExecutorService 'applicationTaskExecutor'
2021-04-21 18:03:58.250 INFO [main]o.s.scheduling.concurrent.ThreadPoolTaskScheduler.initialize:181 -Initializing ExecutorService 'Nacso-Watch-Task-Scheduler'
18:03:58,258 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@748aa7dc - URL [jar:file:/D:/LOCAL_INSTALLER/apache-maven-3.6.3/.m2/repository/com/alibaba/nacos/nacos-client/1.1.4/nacos-client-1.1.4.jar!/nacos-logback.xml] is not of type file
18:03:58,259 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
18:03:58,259 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Will scan for changes in [jar:file:/D:/LOCAL_INSTALLER/apache-maven-3.6.3/.m2/repository/com/alibaba/nacos/nacos-client/1.1.4/nacos-client-1.1.4.jar!/nacos-logback.xml]
18:03:58,259 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - Setting ReconfigureOnChangeTask scanning period to 30 seconds
18:03:58,260 |-INFO in ch.qos.logback.classic.joran.action.ContextNameAction - Setting logger context name as [nacos]
18:03:58,260 |-ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rename context [logback] as [nacos] java.lang.IllegalStateException: Context has been already given a nameat java.lang.IllegalStateException: Context has been already given a nameat at ch.qos.logback.core.ContextBase.setName(ContextBase.java:194)at at ch.qos.logback.classic.LoggerContext.setName(LoggerContext.java:107)at at ch.qos.logback.classic.joran.action.ContextNameAction.body(ContextNameAction.java:31)at at ch.qos.logback.core.joran.spi.Interpreter.callBodyAction(Interpreter.java:289)at at ch.qos.logback.core.joran.spi.Interpreter.characters(Interpreter.java:172)at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:57)at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)at at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)at at com.alibaba.nacos.client.logging.logback.LogbackNacosLogging.loadConfiguration(LogbackNacosLogging.java:44)at at com.alibaba.nacos.client.utils.LogUtils.<clinit>(LogUtils.java:47)at at com.alibaba.nacos.client.naming.utils.InitUtils$1.call(InitUtils.java:56)at at com.alibaba.nacos.client.naming.utils.InitUtils$1.call(InitUtils.java:52)at at com.alibaba.nacos.client.utils.TemplateUtils.stringEmptyAndThenExecute(TemplateUtils.java:43)at at com.alibaba.nacos.client.naming.utils.InitUtils.initNamespaceForNaming(InitUtils.java:52)at at com.alibaba.nacos.client.naming.NacosNamingService.init(NacosNamingService.java:88)at at com.alibaba.nacos.client.naming.NacosNamingService.<init>(NacosNamingService.java:84)at at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at at com.alibaba.nacos.api.naming.NamingFactory.createNamingService(NamingFactory.java:45)at at com.alibaba.nacos.api.NacosFactory.createNamingService(NacosFactory.java:76)at at com.alibaba.cloud.nacos.NacosDiscoveryProperties.namingServiceInstance(NacosDiscoveryProperties.java:486)at at com.alibaba.cloud.nacos.registry.NacosServiceRegistry.<init>(NacosServiceRegistry.java:47)at at com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration.nacosServiceRegistry(NacosServiceRegistryAutoConfiguration.java:51)at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at at java.lang.reflect.Method.invoke(Method.java:498)
解决办法
经过了一系列的烧脑摸索,一无所获,后,在官方文档上找到了相关问题的阐述(不是解决办法),然后再结合以往经验,终于把问题给解决了。
原来,在基于Spring Boot框架项目开发过程中,集成了Alibaba Nacos的服务注册与发现和配置中心,
因为Spring Boot本身已经集成了日志框架Logback,而在Alibaba Nacos中又集成了一套Logback框架(我顶你个肺,Alibaba Nacos给我们开发者们留了这么大一个坑),
而Alibaba Nacos中的Logback加载要优先于项目自身的Logback框架,在一个项目中其context_name只能定义一次,
所以,在项目启动时,Alibaba Nacos的Logback先加载完成后,再加载项目本身的Logback时就出现了冲突,报错误日志 “ Failed to rename context [logback] as [nacos] java.lang.IllegalStateException: Context has been already given a name ” ,但是不影响使用,
虽然不影响使用,但是作为一个传统的老码畜,看着这个错误日志,实在不爽,所以博主把它个消灭了,
解决这个,只要禁用掉其中一个Logback就可以了,一般禁用外部框架夹带的Logback即可 ,在启动类中加入如下段代码即可:
System.setProperty("nacos.logging.default.config.enabled","false");
完整示例:
@EnableDiscoveryClient
@EnableFeignClients
@EnableSwagger2
@MapperScan({"com....*.mapper","com.....system.*.mapper","com.....*.mapper"})
@SpringBootApplication(scanBasePackages = {"com.....","com....."})
public class ApplicationName {public static void main(String[] args) {System.setProperty("nacos.logging.default.config.enabled","false");SpringApplication.run(ApplicationName.class, args);}}
解决后就能成功启动了,如下图;
参考文献:
【alibaba-nacos】
好了,关于 Spring Boot整合Nacos时遇到java.lang.IllegalStateException: Context has been already given a name 的解决办法 就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。
作 者: | 华 仔 |
联系作者: | who.seek.me@java98k.vip |
来 源: | CSDN (Chinese Software Developer Network) |
原 文: | https://blog.csdn.net/Hello_World_QWP/article/details/117597111 |
版权声明: | 本文为博主原创文章,请在转载时务必注明博文出处! |
Spring Boot整合Nacos时遇到 java.lang.IllegalStateException: Context has been already given a name 的解决办法相关推荐
- Spring Boot与Log4j2集成之java.lang.IllegalStateException: Logback configuration error detected:
引言: 一个问题的分析与解决过程是表与里的过程,是一个大胆猜测与小心求证的过程,spring boot与log4j2的集成过程中,我将描述一下分析这个问题的思路和过程. 我一直强调一点: 重要的不是解 ...
- spring boot 启动 nested exception is java.lang.IllegalStateException
2019独角兽企业重金招聘Python工程师标准>>> 在启动spring boot 项目时报错,之前都是OK的,只是我引用了内置的tomcat包就报错了 <dependenc ...
- java.lang.IllegalStateException: Failed to introspect Class报错原因和解决办法
这个报错其实就是没有找到要加载的类,一般在启动的时候报错. 加载不到的类有两种情况,一种是直接找不到要加载的依赖包,或者添加了依赖包后没有加载进入,需要看看是不是 maven 的设置问题,重新刷新加载 ...
- nested exception is java.lang.IllegalStateException: Context namespace element 'annotation-config' a
公司还用的是spring低版本,今天用jre 8测试了一下,发现错误: Unexpected exception parsing XML document from class path resour ...
- java.lang.IllegalStateException: Context namespace element ‘annotation-config’ and its parser class
项目中用的是spring低版本(2.5.6),今天用jre 8测试了一下,发现错误: Unexpected exception parsing XML document from class path ...
- java.lang.IllegalStateException: Unable to read meta-data for class 问题的解决
java.lang.IllegalStateException: Unable to read meta-data for class 问题的解决 参考文章: (1)java.lang.Illegal ...
- idea使用spring框架Exception in thread main java.lang.IllegalStateException错误
自己在用idea自动导包使用spring框架的时候 出现如下错误异常: Exception in thread "main" java.lang.IllegalStateExcep ...
- Spring Cloud RestTemplate报错:java.lang.IllegalStateException: No instances available for xxx
java.lang.IllegalStateException: No instances available for XXXX 一.问题复现 最近搭建springCloud项目,搭建Eureka,多 ...
- 错误码500:消息 java.lang.IllegalStateException: (No output folder)无输出目录解决方法
本文的解决方法是刚安装好tomcat后就无法正常运行的情况.不涉及项目 安装tomcat有两种方式,一个是解压缩版本,一个是安装版,当出现这个问题时一般为解压缩版本才出现 提示错误如下:localho ...
最新文章
- LeetCode简单题之字符串中的单词数
- vue父子组件写法,数据传递,顺便封装 element-ui的弹窗组建
- Struts2笔记——第一个实例HelloWorld
- 《看透springmvc源码分析与实践》读书笔记二
- Vue.js组件化开发实践
- 研华电脑510上电自启_研华工控机怎么设置u盘启动_研华工控机U盘引导方法
- 数据库半年回顾:国外波澜不惊,国内势如破竹
- Facebook再次被曝通过至少11款应用收集用户私密信息
- Spring 整合Mybatis Mapper动态代理方法
- open cv+C++错误及经验总结(三)
- 【礼仪大赛策划方案常识】 什么是正装
- 个人博客前后台整站开发——模板免费下载
- 2021MySql-8.0.26安装详细教程(保姆级)
- Win10用注册表开启任务栏透明
- 只利用 phpstudy 如何运行PHP文件 超详细教程
- 四川贝利思科技:拼多多开店的优势所在
- 大数据发展规划及技术详解
- iVMS-4200 Vs区别_68790红单足球预测 法甲 21:00 安格斯 VS 梅斯
- 《C语言程序设计》江宝钏主编-习题5-3-动态最大值!!!
- 启用Win11原生支持的DoH(DNS over HTTPS)和配置自定义的DoH服务