Le fichier de guerre Spring Boot fonctionne avec intégré mais pas avec Tomcat autonome


Mathias Conradt

Je souhaite créer un fichier war à partir d'une application Spring Boot, que je peux déployer sur un conteneur Tomcat autonome, sans utiliser celui intégré.

Je peux créer le fichier war et l'exécuter seul en utilisant "java -jar pdfjs-annotator.war"et cela fonctionne très bien.

J'ai construit l'application en utilisant gradle bootRepackage(Utilisation de Gradle, Tomcat7, Java 1.7).

Mais lorsque je déploie le fichier war sur un Tomcat autonome et que je le démarre, l'application semble démarrer sans erreurs selon le journal, mais je ne peux accéder à aucune des ressources et les URL du contrôleur ne fonctionnent pas.

Par exemple, mon index.html est une page html statique sous src / main / resources / static / index.html, que je peux généralement appeler via localhost: 8080 / index.html, mais lorsqu'elle est déployée sur un Tomcat autonome, la page ne pas être livré (il est alors dans le fichier war dans WEB-INF / classes / static / index.html) via cette même URL. Et tout type de mappage de contrôleur ne semble pas fonctionner. J'obtiens une erreur 404 à la place.

build.gradle:

buildscript {
    ext {
        springBootVersion = '1.2.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
        classpath("io.spring.gradle:dependency-management-plugin:0.5.0.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot' 
apply plugin: 'io.spring.dependency-management' 
apply plugin: 'war'


war {
    baseName = 'pdfjs-annotator'
    version = '1.0.0-SNAPSHOT'
}

allprojects {
    apply plugin: 'java'
    sourceCompatibility = 1.6
    targetCompatibility = 1.6
}

repositories {
    mavenCentral()
}

configurations {
    providedRuntime
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile("org.springframework.boot:spring-boot-starter-web")
    runtime("mysql:mysql-connector-java")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    compile ('org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Final')
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7'
    }
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.3'
}

Ma classe d' application principale :

@EnableJpaRepositories
@SpringBootApplication
public class PdfAnnotator extends SpringBootServletInitializer {

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

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

}

Quand je regarde la guerre explosée, je vois le META-INF / MANIFEST.MF suivant :

Manifest-Version: 1.0
Start-Class: com.mypackage.pdfcomment.PdfAnnotator
Spring-Boot-Version: 1.2.3.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher

Le processus de construction gradle générait généralement deux artefacts de guerre, l'un nommé .war et l'autre nommé .war.original - le .war est celui qui contient les entrées MANIFEST.MF appropriées et c'est celui que j'ai utilisé pour déployer sur le Tomcat autonome.

Qu'est-ce qui manque? J'ai déjà vérifié d'autres questions ici sur SO:

et aussi les documents Spring Boot, mais je n'ai pas pu trouver un indice de ce qui ne va pas.

* === Mise à jour === *

J'ai installé un tout nouveau Tomcat7, déployé le fichier de guerre là-bas, et tout fonctionne bien. Semblait être un problème avec l'instance / configuration Tomcat que j'avais en cours d'exécution. Je ne sais pas exactement quel était le problème, mais je ne prendrai pas la peine de le vérifier davantage car il fonctionne bien maintenant avec le nouveau Tomcat.

Mathias Conradt

Le projet est en fait correctement configuré et il s'est avéré que le problème venait de l'instance Tomcat que j'exécutais. Probablement quelque chose qui ne va pas avec la configuration ou les jars. L'instance est déjà en place depuis longtemps, peut-être que les choses se sont gâchées avec le temps.

Maintenant qu'une toute nouvelle instance Tomcat7 est installée, la guerre fonctionne très bien.

Articles connexes


Déploiement du fichier de guerre Spring Boot sur Tomcat

kotygoroshko J'utilise Spring Boot 1.2.4.RELEASE avec le fichier source gs-rest-service . J'ai eu: 127.0.0.1 - - [18/Jun/2015:09:59:25 +0300] "GET /gs-rest-service-0.1.0/ HTTP/1.1" 404 1021 Il n'y a pas d'autres exceptions dans les journaux Tomcat. J'ai lu de