L'application Spring Boot ne fonctionne pas lorsqu'elle est déployée dans Tomcat autonome


user3851077

J'ai suivi ce tutoriel . Maintenant, si je l'utilise via Spring Boot, cela fonctionne, mais si j'essaie de le déployer (supprimer la classe d'application) sur Apache Tomcat 7, j'obtiens 404 réponses. J'ai également essayé de créer ma propre configuration - quelque chose comme ceci:

@Configuration
public class MongoConfiguration {

    public @Bean MongoDbFactory mongoDbFactory() throws Exception {
        return new SimpleMongoDbFactory(new Mongo("127.0.0.1", 27017), "movies");
    }

    public @Bean MongoTemplate mongoTemplate() throws Exception {
        return new MongoTemplate(mongoDbFactory());
    }
}

Cela ne fonctionne toujours pas. Donc 2 questions.

  1. comment l'exécuter sur tomcat (comment faire du repos simple et l'exécuter sur tomcat)
  2. comment configurer mongo via annotation (juste pour obtenir ma base de données)

Remarque: par défaut, il utilise le test vile running spring boot et je peux le faire fonctionner via de simples contrôleurs (au lieu de @RepositoryRestResource) mais je veux pouvoir boucler http://localhost:8080et obtenir une réponse avec des options.

Oliver Drotbohm

Vous êtes-vous assuré d'avoir suivi la section sur les déploiements traditionnels de la documentation de référence de démarrage? D'après ce que vous décrivez, il ne semble pas que Spring Data REST ou MongoDB ne fonctionne pas, mais le déploiement ne fonctionne pas vraiment du tout.

L'astuce devrait être de laisser la classe de configuration principale que vous avez à implémenter une interface spéciale afin que le conteneur de servlet puisse trouver la configuration à amorcer (exemple tiré de la documentation de référence):

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {

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

SpringBootServletInitializerest l'aspect clé ici car c'est le type qui se connecte au mécanisme d'amorçage Servlet 3 pour les applications Web traditionnelles. La documentation de référence contient également des instructions sur la façon de faire fonctionner une application de démarrage dans des conteneurs de servlet avant Servlet 3.0.

Notez également que lorsqu'une application est déployée dans un conteneur autonome, elle n'est généralement pas disponible via la racine (c'est-à-dire http://localhost:8080/) mais un contexte dédié nommé d'après le fichier WAR déployé (par exemple http://localhost:8080/my-app).

Articles connexes