Fehler beim Starten des Upgrades der Tomcat-Version

Fehler beim Starten des Upgrades der Tomcat-Version

1. Fehlermeldung:

Error creating bean with name 'eurekaAutoServiceRegistration': 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!)

2. Fehlergrund:

Die Hauptursache ist, dass beim Schließen von ApplicationContext alle Singleton-Beans zerstört werden, eurekaAutoServiceRegistration zuerst zerstört wird und dann feignContext zerstört wird. Wenn feignContext zerstört wird, wird der mit jedem FeignClient verknüpfte ApplicationContext geschlossen. Da eurekaAutoServiceRegistration auf ContextClosedEvent lauscht, sind diese Ereignisse wird an die Bean gesendet. Da sie zerstört wurde, erhalten wir leider die obige Ausnahme (versuchen, die Bean bei Zerstörung zu erstellen).

3. Lösung:

@Component
public class FeignBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    
    

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    
    
        if (containsBeanDefinition(beanFactory, "feignContext", "eurekaAutoServiceRegistration")) {
    
    
          	/* 调整依赖顺序,这样会先销毁 feignContext, 再销毁 eurekaAutoServiceRegistration */
            BeanDefinition bd = beanFactory.getBeanDefinition("feignContext");
            bd.setDependsOn("eurekaAutoServiceRegistration");
        }
   }

   private boolean containsBeanDefinition(ConfigurableListableBeanFactory beanFactory, String... beans) {
    
    
       return Arrays.stream(beans).allMatch(b -> beanFactory.containsBeanDefinition(b));
   }
}

Guess you like

Origin blog.csdn.net/weixin_44796239/article/details/131603272