部署到Tomcat中的SpringBoot WAR文件正在运行,但仍返回404

时间:2019-06-29 17:29:37

标签: spring-boot war tomcat9

我想演示一个简单的SpringBoot应用程序,该应用程序将部署到单独运行的Tomcat实例中。即使我的应用程序似乎已经部署完毕,我也无法在Tomcat中访问它。

我已经按照Spring documentation中的“传统部署”说明进行操作。

我曾尝试使用其他版本的Tomcat,并以ROOT.war的形式运行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的字符串“ something”。

更新-2019-07-12

我尝试使用Maven建立战争,并通过管理器UI手动部署到Tomcat,这可以正常工作

检查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,而在Gradle战争中则是WEB-INF/lib-provided/javax.annotation-api-1.3.2.jar

我想这是它不能与Gradle一起使用的原因之一,但是到目前为止,我还没有设法修改Gradle产生的战争以包括这些差异。

新添加的pom.xml也可以在提供的Github link上查看。

0 个答案:

没有答案