我在非启动弹簧应用程序中有以下内容,2个战争的耳朵应用程序,如何在spring-boot应用程序中实现相同的功能
在服务层:
@Configuration
@ComponentScan("")
@Import({..})
public class BaseConfig implements ApplicationContextAware {
private ApplicationContext parentContext;
@Bean(name = "earParentContext")
public ApplicationContext parentContextKey() {
return this.parentContext;
}
@Override
public void setApplicationContext(final ApplicationContext applicationContext) throws BeansException {
this.parentContext = applicationContext;
}
}
beanRefContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<context:component-scan resource-pattern="BaseConfig.class" base-package="com.pkg.sa.config"
annotation-config="true" />
</beans>
带有ParentContext的War1初始化程序
public class War1Initializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext container) throws ServletException {
ServletRegistration.Dynamic war1Servlet = container.addServlet("war1Dispatcher", new DispatcherServlet());
war1Servlet.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
war1Servlet.setInitParameter("parentContextKey", "earParentContext");
war1Servlet.setLoadOnStartup(1);
war1Servlet.addMapping("/");
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.setDisplayName("AbcNx");
// Registers the application configuration with the root context
BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance("classpath:beanRefContext.xml");
BeanFactoryReference parentContextRef = locator.useBeanFactory("earParentContext");
ApplicationContext parentContext = (ApplicationContext) parentContextRef.getFactory();
rootContext.setParent(parentContext);
rootContext.register(War1WebMvcConfigurer.class);
}
}
使用ParentContext的War2初始化程序
public class War2Initializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext container) throws ServletException {
ServletRegistration.Dynamic war2Servlet = container.addServlet("war2Dispatcher", new DispatcherServlet());
war2Servlet.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
war2Servlet.setInitParameter("parentContextKey", "earParentContext");
war2Servlet.setLoadOnStartup(1);
war2Servlet.addMapping("/");
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.setDisplayName("AbcNx");
// Registers the application configuration with the root context
BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance("classpath:beanRefContext.xml");
BeanFactoryReference parentContextRef = locator.useBeanFactory("earParentContext");
ApplicationContext parentContext = (ApplicationContext) parentContextRef.getFactory();
rootContext.setParent(parentContext);
rootContext.register(War2WebMvcConfigurer.class);
}
}
答案 0 :(得分:1)
Spring Boot使用DispatcherServeletAutoConfig
初始化默认的DispatcherServlet。因此,您需要按以下方式自定义Default Dispatcher Servlet:
@Bean
public DispatcherServlet dispatcherServlet()
{
DispatcherServlet servlet = new DispatcherServlet();
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.setDisplayName("Self Administration Nx");
// Registers the application configuration with the root context
rootContext.setConfigLocation("com.xyz.mnp.config");
BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator.getInstance("classpath:beanRefContext.xml");
BeanFactoryReference parentContextRef = locator.useBeanFactory("sharedContext");
ApplicationContext parentContext = (ApplicationContext) parentContextRef.getFactory();
rootContext.setParent(parentContext);
rootContext.register(WebConfigurer.class);
servlet.setApplicationContext(rootContext);
return servlet;
}