Java Spring 引导 - war 文件未在 Tomcat Apache 上部署

Java Spring Boot - war file not deploying on Tomcat Apache

我正在构建一个 Java Spring 引导项目 - 作为一项要求,我需要将项目生成为 war 文件 - 然后有 Tomcat Apache 运行仅此一项。

我已经构建了 war 文件,但是当我尝试部署它时,它的结构好像不正确并且它生成了一个 404 试图查看项目。

Java Spring Boot - war file not deploying on Tomcat Apache

Spring-使用 application.jar 构建的引导,包括内部应用程序服务器。

Spring Boot 的目标是让创建 Spring 支持的生产级应用程序和服务变得容易,而且不会大惊小怪。它采用了 Spring 平台的自以为是的观点,以便新用户和现有用户可以快速获得他们需要的位。您可以使用它来创建独立的 Java 应用程序,这些应用程序可以使用“java -jar”或更传统的 WAR 部署启动。我们还提供了一个运行“spring 脚本”的命令行工具。

https://spring.io/blog/2013/08/06/spring-boot-simplifying-spring-for-everyone

So, You don't need to again deploy in Apache Tomcat Application Server. Just Run It like simple java .jar file.

nohup java -jar app.jar &

Spring 启动 web 项目的工作示例 Spring Boot WebApp as WAR

通过 maven 构建的常规 Spring 启动应用程序是一个打包的 jar。

需要修改为WAR,检查WEB-INF内容是否正确

Spring 打包为 war 的启动应用程序不是单独部署到 Tomcat 而是直接通过 Spring 启动应用程序部署到 运行(通过 main方法)。您需要测试,但根据我的理解,如果有人建议您将其部署在 tomcat 中,那么您需要通知他们他们要求的是常规 Web 应用程序,而不是 Spring启动应用程序。

每个 Spring 启动应用程序 运行 都有自己的容器。

此外,您将视图文件保存在模板目录中,如果您不使用 Thymeleaf,则不能将它们作为静态内容从模板目录中选取。

根据 Traditional deployment page 你必须添加依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

要获得 Spring 引导以部署为 war - 您需要重新配置应用程序 class。

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

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

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

}

在 pom.xml 添加

<packaging>war</packaging>

因为我使用的是 maven,所以我也添加了依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

我的应用程序很复杂,因为我使用 reactjs 作为前端表示层,而 Java 只是作为 api 层。我必须将 reactjs 构建移动到 main/src/webapps——然后它会在 war 文件中正确呈现为 js、css 和 html 文件的捆绑包。当 reactjs 充当表示层时,它只能通过 api 连接到 java 端 - 所以 url 结构很重要,我已经把所有东西都放在预期中 运行 从根开始。因此,如果您部署到 tomcat - 您可能需要重命名 war 文件 ROOT.war.