eureka client 关闭异常 BeanCreationNotAllowedException

BeanCreationNotAllowedException

It can be easily reproduced with Boot 2.0.4 or 1.5.14 (ie Spring Cloud Edgware.SR4 or Finchley.SR1)

(1)    public synchronized void shutdown() {
(2)        if (isShutdown.compareAndSet(false, true)) {
(3)            logger.info("Shutting down DiscoveryClient ...");
(4)
(5)            if (statusChangeListener != null && applicationInfoManager != null) {
(6)                applicationInfoManager.unregisterStatusChangeListener(statusChangeListener.getId());
(7)            }

原因:

Let's recap:

  • DiscoveryClient.shutdown() is invoked during the application context shutdown/close process
  • DiscoveryClient needs to unregister from the ApplicationInfoManager
  • applicationInfoManager is refresh-scoped, its target must be resolved for every method invocation
  • the resolution fails with a BeanCreationNotAllowedException because the BeanFactory is in closing state.

归纳: applicationInfoManager是refreshscoped bean, 每次调用进行bean的重新加载,关闭服务期间重新生成bean, 导致该异常, 在后续版本中进行了修复.

修复提交 : https://github.com/spring-cloud/spring-cloud-netflix/commit/0c3fbc34f6b906bbe5ffc0a6ac5900357b67c72a

发布了20 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/u011248560/article/details/103868959