Java 禁用BeanDefinition覆盖Spring Boot wep应用程序(war文件)
如果我有重复的bean名称,Spring boot将覆盖它。我想禁用此功能。我看到很多关于这个的讨论,其中它禁用了main方法内部的重写。但在web应用程序中,根本不会调用main方法。如何禁用它?在主方法中,您需要创建一个新的Java 禁用BeanDefinition覆盖Spring Boot wep应用程序(war文件),java,spring-boot,web,Java,Spring Boot,Web,如果我有重复的bean名称,Spring boot将覆盖它。我想禁用此功能。我看到很多关于这个的讨论,其中它禁用了main方法内部的重写。但在web应用程序中,根本不会调用main方法。如何禁用它?在主方法中,您需要创建一个新的ApplicationContextInitializer并重写其initialize()方法以禁用bean定义重写。见下文: new SpringApplicationBuilder(SpringBootApp.class) .initializers(new
ApplicationContextInitializer
并重写其initialize()
方法以禁用bean定义重写。见下文:
new SpringApplicationBuilder(SpringBootApp.class)
.initializers(new ApplicationContextInitializer<GenericApplicationContext>()
{
@Override
public void initialize(GenericApplicationContext applicationContext)
{
applicationContext.setAllowBeanDefinitionOverriding(false);
}
})
.run(args);
我已经说过,这个webapp not jar根本没有调用main方法。不起作用,我在上得到了语法错误:applicationContext.setAllowBeanDefinitionOverriding(false)@Mohammad Karmi是的,因为您需要提供此功能的
ConfigurableApplicationContext
实现(即AbstractRefreshableApplicationContext
)。请参阅修复了语法错误,但仍未禁用重写
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());
}
}