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
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).
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).
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.
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.