creating bean with name 'nacosAutoServiceRegistration': Singleton bean creation ...
🚨 错误信息
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监听器:
查找所有实现了 - 移除或修改逻辑: 在该监听器的方法中,检查是否有代码尝试获取或创建
- 延迟销毁或条件性执行: 如果必须在该监听器中处理某些逻辑,可以考虑使用
- 避免在销毁阶段访问 Bean:应用程序上下文销毁时,Bean 正在被清理,此时不应再尝试创建或访问 Bean。检查销毁阶段的生命周期回调和事件监听器。
- 管理 Bean 的生命周期:确保 Bean 的创建和销毁过程是按照预期的顺序进行,特别是在涉及多个 Bean 之间的依赖关系时。Spring 的生命周期管理非常重要,不当的干预可能导致此类问题。
ApplicationListener 接口的类,或者使用了 @EventListener(ContextClosedEvent.class) 注解的方法。
nacosAutoServiceRegistration Bean。如果存在,请移除该代码,或者确保它不会在应用上下文销毁阶段执行。例如,如果它是一个注册/注销逻辑,可能需要在销毁前就执行完毕。
@PreDestroy 注解在 Bean 真正销毁前执行清理操作,或者在监听器逻辑中添加条件判断,避免在销毁阶段进行不必要的操作。