creating bean with name 'nacosAutoServiceRegistration': Singleton bean creation ...

2025年10月17日 17:55 响应: 4.29秒 状态: success

🚨 错误信息

2025-10-17 17:53:53.719 [main] WARN [AbstractApplicationContext.java:1133] TID: N/A - Exception thrown from ApplicationListener handling ContextClosedEvent org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'nacosAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1234) at org.springframework.context.event.ApplicationListenerMethodAdapter.getTargetBean(ApplicationListenerMethodAdapter.java:392) at org.springframework.context.event.ApplicationListenerMethodAdapter.doInvoke(ApplicationListenerMethodAdapter.java:354) at org.springframework.context.event.ApplicationListenerMethodAdapter.processEvent(ApplicationListenerMethodAdapter.java:237) at org.springframework.context.event.ApplicationListenerMethodAdapter.onApplicationEvent(ApplicationListenerMethodAdapter.java:168) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:451) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:457) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:384) at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1130) at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1093) at org.springframework.cloud.context.named.NamedContextFactory.destroy(NamedContextFactory.java:114) at org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:211) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:587) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:559) at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:1202) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:520) at org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:1195) at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1186) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:637) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) at org.springframework.boot.SpringApplication.run(SpringApplication.java:334) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1354) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) at com.supefina.aggregated.job.bootstrap.BootstrapApplication.main(BootstrapApplication.java:46)

🤖 AI解决方案

错误翻译

org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'nacosAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)

org.springframework.beans.factory.BeanCreationNotAllowedException: 创建名为 'nacosAutoServiceRegistration' 的 Bean 时出错:在 Factory 的单例 Bean 销毁过程中不允许创建单例 Bean(请勿在销毁方法实现中从 BeanFactory 请求 Bean!)

原因分析

在 Spring 应用上下文关闭(销毁)过程中,nacosAutoServiceRegistration 这个 Bean 的创建被触发了,但此时 BeanFactory 处于销毁状态,不允许再创建新的 Bean。这通常发生在 ContextClosedEvent 的监听器中,该监听器尝试访问或创建已经被销毁的 Bean。

解决方案

  • 检查 ContextClosedEvent 监听器
  • 查找所有实现了 ApplicationListener 接口的类,或者使用了 @EventListener(ContextClosedEvent.class) 注解的方法。
  • 移除或修改逻辑
  • 在该监听器的方法中,检查是否有代码尝试获取或创建 nacosAutoServiceRegistration Bean。如果存在,请移除该代码,或者确保它不会在应用上下文销毁阶段执行。例如,如果它是一个注册/注销逻辑,可能需要在销毁前就执行完毕。
  • 延迟销毁或条件性执行
  • 如果必须在该监听器中处理某些逻辑,可以考虑使用 @PreDestroy 注解在 Bean 真正销毁前执行清理操作,或者在监听器逻辑中添加条件判断,避免在销毁阶段进行不必要的操作。

    预防措施

  • 避免在销毁阶段访问 Bean:应用程序上下文销毁时,Bean 正在被清理,此时不应再尝试创建或访问 Bean。检查销毁阶段的生命周期回调和事件监听器。

  • 管理 Bean 的生命周期:确保 Bean 的创建和销毁过程是按照预期的顺序进行,特别是在涉及多个 Bean 之间的依赖关系时。Spring 的生命周期管理非常重要,不当的干预可能导致此类问题。