java.lang.IllegalStateException: Context has been already given a name报错分析解决

背景

  将dubbo的注册中心从zk切换到nacos后,在kubesphere中启动应用时发现如下报错。根据报错进行本地复现并分析出原因

jreap-demo [main]2023-04-25 09:09 [  ERROR] o.s.b.SpringApplication --- Application run failed
 java.lang.IllegalStateException: Logback configuration error detected: 
 ERROR in ch.qos.logback.classic.joran.action.ContextNameAction - Failed to rename context [applicationName_IS_UNDEFINED] as [jreap-demo] java.lang.IllegalStateException: Context has been already given a name
  at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:167)
  at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
  at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:118)
  at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:289)
  at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:264)
  at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:226)
  at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:203)
  at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
  at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
  at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
  at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
  at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:76)
  at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53)
  at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:342)
  at org.springframework.boot.SpringApplication.run(SpringApplication.java:305)
  at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
  at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204)
  at com.example.demo.boot.JreapDemoBootApplication.main(JreapDemoBootApplication.java:49)

错误分析并解决

  1. 根据报错信息找到报错位置:ContextNameAction
    在这里插入图片描述
    1.1 断点ContextBase#setName方法发现其默认值为default,并且只能修改一次 在这里插入图片描述

  2. [applicationName_IS_UNDEFINED] as [jreap-demo] 错误说明项目里有两处设置logback的contextName,查询项目确实有两处设置了spring.application.name的值(下面是我的相关配置)
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  3. 根据上面分析可以猜测应该是有个配置没有生效,经过排查发现因为没有将bootstrap.yaml打到容器里,并且logback优先加载bootstrap.yaml。
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值