Я хочу продемонстрировать простое приложение 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 .