Файл WAR SpringBoot, развернутый в Tomcat, работает, но все еще возвращает 404 - PullRequest
0 голосов
/ 29 июня 2019

Я хочу продемонстрировать простое приложение SpringBoot, развертываемое в отдельно работающем экземпляре Tomcat.Несмотря на то, что мое приложение было развернуто, я не могу получить к нему доступ в Tomcat.

Я следовал инструкциям «Традиционное развертывание» в документации Spring .

IЯ попытался использовать другую версию Tomcat и запустить файл войны как ROOT.war, но получил похожее поведение.

Когда я запускаю автономный режим войны, например java -jar build/libs/springbootify.war, я могу успешно получить доступ к ожидаемому URL http://localhost:8080/doit.

Application.java

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

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

MyController.java

@RestController
public class MyController {
    @GetMapping(value = "/doit")
    public String getSomething() {
        return "Something";
    }
}

build.gradle

plugins {
    id 'war'
    id 'java'
    id 'io.spring.dependency-management' version "1.0.8.RELEASE"
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'com.palantir.docker' version '0.22.1'
    id 'com.palantir.docker-run' version '0.22.1'
}

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    compile 'org.springframework.boot:spring-boot-devtools'
}

См. Воспроизводимый пример на Github .

Я вижу, что файл war был развернут в журналах Tomcat

29-Jun-2019 17:07:04.434 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/springbootify.war] has finished in [857] ms

Однако, когда я получаю доступ к http://localhost:8080/springbootify/doit, я получаю ответ 404.

Я ожидаю, что это вернет строку "что-то" с ответом 200.

ОБНОВЛЕНИЕ - 2019-07-12

Я пытался построить войну с помощью Maven и вручную развернуть ее в Tomcat через маNager UI, и это работает правильно

Проверка различий между файлами war, сгенерированными Gradle и Maven, я обнаружил следующее:

1) Maven добавляет эти дополнительные атрибуты к META-INF/MANIFEST.MF:

Created-By: Maven Archiver 3.4.0
Build-Jdk-Spec: 12
Implementation-Title: springbootify
Implementation-Version: 0.0.1-SNAPSHOT

2) Maven добавляет к войне эту дополнительную библиотеку:

WEB-INF/lib/javax.annotation-api-1.3.2.jar, тогда как в войне Градл она находится в WEB-INF/lib-provided/javax.annotation-api-1.3.2.jar

Я собираюсь предположитьэто одна из этих причин того, что он не работает с Gradle, но до сих пор мне не удалось изменить сгенерированную Gradle войну, чтобы включить эти различия.

Недавно добавленный pom.xml также можно просмотреть на предоставленной Github link .

...