2016-08-01 63 views
1

我有一个没有任何xml配置文件的骆驼项目spring mvc。骆驼上下文启动两次spring mvc java config

我的问题是有两个上下文:Spring根WebApplicationContext和Spring FrameworkServlet'dispatcher',并且在每个上下文(camel-1和camel-2)上都使用相同的路由创建一个camel上下文。因此,如果我停止或挂起一条路线,她仅停留在一个上下文中(WebApplicationContext)。我希望有上下文骆驼只有一次。我能怎么做 ?

ApplicationConfiguration.java

package sal.sfs.configuration; 

    import sal.sfs.security.SfsSessionInfo; 
    import org.springframework.context.annotation.Bean; 
    import org.springframework.context.annotation.ComponentScan; 
    import org.springframework.context.annotation.Configuration; 
    import org.springframework.context.annotation.Import; 
    import org.springframework.context.annotation.PropertySource; 
    import org.springframework.web.servlet.ViewResolver; 
    import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
    import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 
    import org.springframework.web.servlet.view.InternalResourceViewResolver; 

    @Configuration 
    @EnableWebMvc 
    @ComponentScan(basePackages = "sal.sfs") 
    @PropertySource(value = {"classpath:sfs.properties"}) 
    @Import({PersistenceConfiguration.class, SecurityConfiguration.class, SfsCamelConfiguration.class}) 
    public class ApplicationConfiguration extends WebMvcConfigurerAdapter { 

     @Bean(name = "SFS") 
     public ViewResolver viewResolver() { 
      InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
      viewResolver.setSuffix(".zul"); 
      return viewResolver; 
     } 

     /* 
     * Configure ResourceHandlers to serve static resources like CSS/ Javascript etc... 
     */ 
     @Override 
     public void addResourceHandlers(ResourceHandlerRegistry registry) { 
      registry.addResourceHandler("/css/**").addResourceLocations("/css/"); 
      registry.addResourceHandler("/img/**").addResourceLocations("/img/"); 
     } 

    } 

SfsCamelConfiguration.java

package sal.sfs.configuration; 

import java.util.List; 
import javax.annotation.Resource; 
import org.apache.camel.Route; 
import org.apache.camel.spring.javaconfig.CamelConfiguration; 
import org.apache.camel.spring.spi.SpringTransactionPolicy; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.context.annotation.Import; 

@Configuration 
@ComponentScan("sal.sfs.camel") 
@Import(PersistenceConfiguration.class) 
public class SfsCamelConfiguration extends CamelConfiguration { 

    @Resource 
    PersistenceConfiguration persistenceConfiguration; 

    @Bean 
    public SpringTransactionPolicy camelTransactionPolicy() { 
     SpringTransactionPolicy springTransactionPolicy = new SpringTransactionPolicy(); 
     springTransactionPolicy.setTransactionManager(persistenceConfiguration.transactionManager(persistenceConfiguration.entityManagerFactory().getObject())); 
     springTransactionPolicy.setPropagationBehaviorName("PROPAGATION_REQUIRED"); 
     return springTransactionPolicy; 
    } 

} 

SecurityWebApplicationInitializer.java

package civadis.salaires.sfs.configuration; 

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; 

public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { 

} 

SpringMvcInitializer.java

package sal.sfs.configuration; 

import javax.servlet.Filter; 
import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter; 
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; 

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[]{ApplicationConfiguration.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[]{ApplicationConfiguration.class}; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[]{"/", "*"}; 
    } 


    /* 
    Also we have registered OpenEntityManagerInViewFilter to enable lazy loading of JPA entity graphs in view rendering phase 
    */ 
    @Override 
    protected Filter[] getServletFilters() { 
     return new Filter[]{ 
      new OpenEntityManagerInViewFilter() 
     }; 
    }  
} 
+0

你用什么版本的骆驼?试用最新版本 –

+0

Hi Claus,我使用了Spring 4.2.5版本的最新版驼驼2.17.2。 – catciv

回答

0

如果我改变getServletConfigClasses()这是好的:

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

... 
    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 
... 
}