将Spring Boot应用程序部署到本地Tomcat服务器:404响应



我使用Spring Initializer生成了一个简单的Greeting web应用程序,并选择war作为打包类型。从带有mvn spring-boot:run的终端启动它并将我的浏览器指向http://localhost:8080/greeting会返回预期的响应。

我遵循了本文的部署步骤,并修改了pom.xml,以避免在生成的war:中包含版本号

<build>
<finalName>${artifactId}</finalName>
<plugins>
...
</build>

我像往常一样用mvn clean install构建战争,并得到了预期的demo-spring-web.war,我将其复制/粘贴到apache-tomcat-10.0.4/webapp文件夹中。

然后,我从Tomcatbin文件夹启动了运行catalina.sh run的Tomcatbu。Tomcat启动并显示要成功部署的demo-spring-web.war

11-Apr-2021 18:24:36.414 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR 
Deployment of web application archive [/Users/serguei/soft/apache-tomcat-10.0.4/webapps/demo-spring-web.war] has finished in [1,286] ms

但是,当我尝试访问localhost:8080/demo-spring-web/greeting上部署的应用程序时,它返回了404状态。

怎么了?

您必须声明一个扩展SpringBootServletInitializer的运行类,以便在战争模式下部署。像这样:

@SpringBootApplication public class AppTomcat extends SpringBootServletInitializer {
}
  1. spring初始化器中默认准备/初始化的应用程序包含初始化应用程序的main((方法,以便它可以在独立模式下运行,并可以快速测试。如果您想将其部署到另一个容器,则应该制作一个servlet来初始化应用程序

因此,您应该使用SpringBootServletInitializer扩展具有main方法的类,并移除main方法。

  1. ;mvn清洁包装";如果你有插件";org.springframework.boot";中

我认为以下两个步骤将使构建的战争能够在外部tomcat中部署。

我以前读过一篇文章,可能也有帮助:https://www.baeldung.com/spring-boot-war-tomcat-deploy

相关内容

最新更新