2015-03-23 3 views
11

Ho un'applicazione di integrazione Spring Boot con Camel-HTTP. Poiché Camel-HTTP ha una dipendenza da geronimo-servlet Spring Boot sta tentando di caricare il contesto dell'applicazione web.Come posso evitare che Spring Boot carichi EmbeddedWebApplicationContext?

Come posso forzare Spring a non caricare EmbeddedWebApplicationContext?

Ho provato a escludere tutte le classi AutoConfiguration trovate in org.springframework.boot.autoconfigure.web con l'annotazione @EnableAutoConfiguration(exclude = ...).

risposta

14

È possibile utilizzare la classe SpringApplicationBuilder di disabilitare il caricamento di un ambiente web e il contesto, cioè nella classe principale:

public static void main(String[] args) { 
    new SpringApplicationBuilder(MainConfig.class).web(false).run(args); 
} 
+1

Che ha funzionato! Stavo facendo lo stesso con 'SpringApplication' invece di' SprintApplicationBuilder', ma stava rilevando il servlet e creando il contesto web. Con il costruttore funziona perfettamente. Grazie –

+0

Questo non funzionerà se javax.servlet.Servlet o org.springframework.web.context.ConfigurableWebApplicationContext si trovano nel classpath. Meglio chiamare il metodo contextClass per specificare AnnotationConfigApplicationContext. –

+0

@ConstantinoCronemberger La chiamata 'web (false)' è dopo il metodo 'initialize (sources)', che viene chiamato come parte del costruttore SAB/SA, quindi questo non dovrebbe essere il caso? –

0

Si può provare a utilizzare il @ContextConfiguration della nota:

@ContextConfiguration(loader = SpringApplicationCtxtLoader.class, classes = annotatedClass.class) 

Il annotatedClass.class sono la classe che sono annotated, per esempio con: @Component, @Service, @Repository.

In this risposta questo è l'approccio suggerito a scopo di test, ma credo che potrebbe aiutare

+0

Che potrebbe funzionare per i test, ma non per l'applicazione Spring Boot stessa –