2015-02-11 8 views
5

Una domanda generale sulla creazione di una guerra da un'applicazione di avvio a molla e l'esecuzione in un contenitore di servlet indipendente. La documentazione che ho sembra sembra in disaccordo con esempi su Stack Overflow.Guerra di avvio Spring Boot in un contenitore servlet indipendente

La risposta here mostra il modo in cui ho letto di farlo un paio di mesi fa. Ho letto questo here, ma la guida sembra essere cambiata perdendo l'app di esempio.

Qui il metodo "configure" fa riferimento al boot spring principale Application.class.

public class WebInitializer extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(Application.class); 
    } 
} 

ci sono anche questi posti here e here che mostrano il metodo "configura", riferendosi al sub di classe SpringBootServletInitializer stessa.

public class BootStrap extends SpringBootServletInitializer { 

    public static void main(String[] args) { 
     SpringApplication.run(BootStrap.class, args); 
    } 

    @Override 
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) { 
     return application.sources(BootStrap.class); 
    } 
} 

e c'è anche un metodo principale.

anche l'esempio app primavera-boot-campione-tradizionale https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples, che mostra "packaging WAR" fa in modo diverso

public class WebConfig extends WebMvcConfigurerAdapter {......... 

mi chiedevo è che ci sono problemi con la scelta di più di questi modi diversi di apparentemente raggiungere la stessa cosa in avvio di primavera? Oppure funzionano tutti allo stesso modo e sono intercambiabili?

risposta

8

Avere classe di applicazione principale estendere SpringBootServletInitializer (Bootstrap nella tua domanda) o utilizzare una classe separata (WebInitializer nella tua domanda) è giù per il gusto personale. La mia preferenza è prendere l'approccio Bootstrap ma entrambi funzionano allo stesso modo; scegli quello che preferisci.

Se si sta solo distribuendo l'applicazione in un contenitore servlet autonomo, non è necessario il come metodo principale. Il metodo principale viene utilizzato se si desidera eseguire l'applicazione come una guerra eseguibile (java -jar my-app.war) o se si desidera essere in grado di eseguirla direttamente nell'IDE, ad esempio senza che l'IDE lo distribuisca a un contenitore servlet.

spring-boot-sample-traditional illustra l'uso di web.xml in Bootstrap un'applicazione di avvio a molla. In generale, questo non è un approccio consigliato a meno che non sia bloccato su un contenitore Servlet 2.5. L'uso di WebMvcConfigurerAdapter non ha nulla a che vedere con la confezione di WAR. Dai uno sguardo al suo web.xml per vedere le parti rilevanti della configurazione.

+0

grazie per la spiegazione approfondita - molto apprezzato :). Ho finito per scegliere l'approccio "WebInitializer" come lo Spring Initializr menzionato in seguito ha generato che .... – n99

+0

@Andy Wilkinson, tu dici "Se stai solo distribuendo la tua applicazione in un contenitore servlet autonomo, non hai bisogno di un metodo principale." ... ma come si farebbe per farlo? Tutta la letteratura su Spring sembra riguardare Spring Boot, ma nessuno porterà Spring Boot alla produzione. Ad un certo punto nel tempo, verranno distribuiti su un server autonomo, ma non c'è quasi nessuna letteratura per farlo. Qualche consiglio? – Jeach

+0

AFAIK, la maggior parte delle persone esegue Spring Boot in produzione utilizzando un jar eseguibile anziché un server autonomo. Se hai bisogno di usare un server standalone allora entrambi [la documentazione] (http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file) e questa domanda ti dice come farlo. –

4

Usa Primavera Initializr http://start.spring.io/

Scegliete il tipo di progetto (Gradle o Maven) e Packaging come la guerra.

Aggiungi Web come dipendenza e Genera il progetto.

Ciò avvierà la tua app in modo "corretto".

+0

grazie - accetta anche questo come risposta pure se è stato possibile accettare più risposte .... – n99

+0

no prob, grazie comunque – selvinsource