web-dev-qa-db-fra.com

Spring Boot déployé dans Tomcat donne 404 mais fonctionne de manière autonome

Je teste Spring Boot avec Tomcat intégré depuis environ un mois pour créer une API REST. Tout fonctionnait bien. Nous souhaitons maintenant déployer l'API dans un environnement de développement séparé, dans lequel deux autres applications (non Spring) s'exécutent sur un conteneur Tomcat.

J'ai apporté les modifications spécifiées dans Conversion d'une application JAR Spring Boot en un WAR à l'aide de Maven et Spring Boot Docs .

Le déploiement se déroule bien (les journaux sont corrects, pas d'erreur) et, en regardant la gestion de Tomcat, je vois mon application déployée. Cependant, lorsque je tente d'accéder à http: // localhost: 8080/sophia/users in curl, je reçois le code 404.

Toute aide est très appréciée.

METTRE À JOUR:

Voici mes journaux:

Netbeans:

NetBeans: déploiement sur Apache Tomcat 8.0.17 mode profil: faux mode débogage: faux force redéployée: true

Déploiement sur place dans /home/bugz/workspace/pdcore/sophiaserver/target/sophia-server-1.0.0-SNAPSHOT

Le déploiement est en cours ...

deploy? config = fichier% 3A% 2Ftmp% 2Fcontext1845402702541504208.xml & path =/sophia

OK - Application déployée sur le chemin du contexte/sophia

Le début est en cours ...

commencer? chemin =/sophia

OK - Application lancée sur le chemin du contexte/sophia

Matou:

INFO 10: 47: 52: 703 org.springframework.boot.context.embedded.ServletRegistrationBean - Servlet de mappage: 'dispatcherServlet' à [/ sophia/*]

INFO 10: 47: 54: 042 org.springframework.boot.SpringApplication - Démarrage de l'application en 8.285 secondes (la machine virtuelle Java s'exécutant sous 12087.301)

22 janvier 2015 10: 47: 54.060 INFO [http-nio-8080-exec-99] org.Apache.catalina.startup.HostConfig.deployDescriptor Déploiement du descripteur de configuration/home/bugz/workspace/server/Apache-Tomcat- 8.0.17/conf/Catalina/localhost/sophia.xml terminé en 12,091 ms

Et dans sophia.xml pour 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"/>

J'ai essayé d'accéder

  1. http: // localhost: 8080/sophia/users
  2. http: // localhost: 8080/sophia-server-1.0.0-SNAPSHOT/users (nom du fichier WAR)

Le premier retourne un 404 mais avec les informations CORS de mon haricot de filtre CORS. Le second retourne 404 sans information CORS (ce qui indique que l'application a démarré et est configurée mais je ne semble pas avoir accès aux contrôleurs).

11
xelamitchell

Lors de l'exécution d'une application, le chemin à appeler est composé de deux parties. 

La première est l'URL de base sur laquelle l'application est déployée, dans votre cas, il s'agit de /sophia.

La seconde est le mappage de servlet de la DispatcherServlet dans votre cas qui est /sohpia/*.

Le troisième est le mappage du contrôleur à l'intérieur de la DispatcherServlet, dans votre exemple, /users.

Toutes ces choses combinées créent l'URL /sophia/sophia/users

La différence entre le déploiement en tant que fichier WAR réside dans le fait que vous avez inclus une URL distincte sur laquelle effectuer le déploiement. Lors de son exécution en tant que jar, il est déployé par défaut sur / (la racine). 

Vous pouvez résoudre ce problème en mettant /sophia en tant que server.context-path dans le application.properties et mappez la DispatcherServlet à /* ou /. Dans les deux cas, cela vous donnera l'URL souhaitée (et attendue).

18
M. Deinum

check Java -version signifie que si vous vous êtes conformé à Java 8 et que Tomcat s'exécute sous Java 7, cela ne fonctionne pas.

6
jeet singh parmar

Avez-vous essayé d'étendre SpringBootServletInitializer et de remplacer la méthode configure? Comme indiqué ici

Le point d'entrée du fichier jar est différent [Classe principale] par rapport à l'exécution de votre application en tant que fichier war dans un conteneur.

J'espère que cela t'aides.