2016-12-29 96 views
0

我有以下的非启动Spring应用程序,耳2战,如何实现相同的弹簧启动应用程序父应用程序上下文在春季启动

在服务层应用程序:

@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> 

WAR1初始化程序与ParentContext

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); 
    } 
} 

WAR2初始化程序与ParentContext

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); 
    } 
} 

回答

1

春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; 
    } 
+0

谢谢,稍后会尝试一下..并更新。 –

相关问题