如果我有重复的bean名称,Spring Boot将覆盖它。我想禁用此功能。我看到了很多关于此问题的讨论,其中它禁用了main方法中的覆盖。但在网络应用中,根本不会调用main方法。如何禁用它?
答案 0 :(得分:0)
在您的main方法中,您需要创建一个新的ApplicationContextInitializer
并覆盖其initialize()
方法来禁用Bean定义覆盖。见下文:
new SpringApplicationBuilder(SpringBootApp.class)
.initializers(new ApplicationContextInitializer<GenericApplicationContext>()
{
@Override
public void initialize(GenericApplicationContext applicationContext)
{
applicationContext.setAllowBeanDefinitionOverriding(false);
}
})
.run(args);
-更新-
由于您是作为Web应用程序部署的,因此上述方法当然行不通。
您可以实现WebApplicationInitializer接口并覆盖其startup()
方法,提供自定义ApplicationContextInitializer
:
public class CustomInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>
{
@Override
public void initialize(ConfigurableApplicationContext applicationContext)
{
applicationContext.setAllowBeanDefinitionOverriding(false);
}
}
public class WebInitializer implements WebApplicationInitializer
{
@Override
public void onStartup(ServletContext servletContext) throws ServletException
{
DispatcherServlet servlet = new DispatcherServlet();
servlet.setContextInitializers(new CustomInitializer());
}
}