2015-01-22 20 views
11

Sto testando Spring Boot con Tomcat incorporato per circa un mese ora per creare un'API REST. Tutto andava bene. Ora vogliamo distribuire l'API in un ambiente di sviluppo separato che ha un paio di altre applicazioni (non Spring) in esecuzione su un contenitore Tomcat.Avvio a molla distribuito in Tomcat fornisce 404 ma funziona Stand-alone

Ho apportato le modifiche specificate in Converting a Spring Boot JAR Application to a WAR using Maven e Spring Boot Docs.

La distribuzione va bene (i registri sono a posto, nessun errore) e guardando la gestione di Tomcat vedo la mia applicazione distribuita. Tuttavia, quando cerco di accedere a http://localhost:8080/sophia/users in curl ottengo 404.

Qualsiasi aiuto è molto apprezzato.

UPDATE:

qui sono i miei log:

Netbeans:

NetBeans: Distribuzione su Apache Tomcat 8.0.17 modalità profilo: true modalità di debug: true forza redeploy: true

Distribuzione sul posto in /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAP SHOT

distribuzione è in corso ...

distribuire config = file% 3A% 2Ftmp% 2Fcontext1845402702541504208.xml & path =/Sophia

OK -? Schierato applicazione al contesto percorso/Sophia

Start è in corso ...

inizio path =/Sophia

OK - Iniziato domanda presso contex t percorso/Sophia

Tomcat:

INFORMAZIONI 10: 47: 52: 703 org.springframework.boot.context.embedded.ServletRegistrationBean - Mapping servlet: 'DispatcherServlet' a [/ Sophia/* ]

INFO 10: 47: 54: 042 org.springframework.boot.SpringApplication - Iniziata applicazione in 8.285 secondi (JVM in esecuzione per 12.087,301)

22-Jan-2015 10: 47: 54,060 INFO [HTTP nio-8080-exec-99] org.apache.catalina.startup.HostConfig.deployDescrip tor distribuzione del descrittore configurazione /home/bugz/workspace/server/apache-tomcat-8.0.17/conf/Catalina/localhost/sophia.xml ha terminato in 12.091 ms

E a Sophia.XML per Catalina localhost:

<?xml version="1.0" encoding="UTF-8"?> 
<Context antiJARLocking="true" docBase="/home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT" path="/sophia"/> 

Ho provato accesso

  1. http://localhost:8080/sophia/users
  2. http://localhost:8080/sophia-server-1.0.0-SNAPSHOT/users (nome della guerra)

Il primo restituisce un 404 ma con le informazioni CORS dal mio bean di filtro CORS. Il secondo return 404 senza informazioni CORS (che indica che l'applicazione è stata avviata e configurata ma non sembra che abbia accesso ai controller).

+0

Controlla il tuo file di log, sei sicuro che l'applicazione sia distribuita su quell'URL specifico ... –

+0

@M. Deinum, ho aggiunto i log che sto ottenendo. I controller sono mappati e sembra che stia implementando il contesto come previsto (/ sophia). – xelamitchell

+0

La tua applicazione è mappata a '/ sophia', il tuo' DispatcherServlet' è mappato a '/ sophia/*', facendo in modo che l'URL chiami '/ sophia/sophia/users'. Quando viene eseguito come jar viene distribuito come applicazione root mappata a '/' ... –

risposta

17

Quando si esegue un'applicazione, il percorso da chiamare consiste in un paio di parti.

Il primo è l'URL di base su cui è distribuita l'applicazione, nel tuo caso è /sophia.

Il secondo è la mappatura servlet di DispatcherServlet nel tuo caso che è /sohpia/*.

Il terzo è la mappatura del controller all'interno di DispatcherServlet, nell'esempio che è /users.

Tutte le cose combinate creano l'URL /sophia/sophia/users.

La differenza tra la distribuzione come WAR è che è stato incluso un URL separato da distribuire, quando viene eseguito come jar, per impostazione predefinita viene distribuito su / (la radice).

Si potrebbe risolvere il problema mettendo /sophia come il server.context-path nella application.properties e mappare l'DispatcherServlet a /* o /. Questo in entrambe le situazioni ti darà l'URL che desideri (e atteso).

4

controllare java -version significa che se hai rispettato war in java 8 e tomcat è in esecuzione su java 7, allora non funziona.

Problemi correlati