zoukankan      html  css  js  c++  java
  • Spring Boot 项目打成 war 包部署,接口报 404 问题

    Spring Boot 一个非常方便的功能就是支持内置的 Servlet 容器,一般我们部署 Spring Boot 应用时都是打成一个可执行的 Jar 包进行部署。其实 Spring Boot 也是支持打成传统的 war 包部署的。肯定有人问:既然 Jar 包简单又方便,为什么还要 用 war 包部署呢?其实我就是自己折腾下,哈哈~

    需要注意的是,假如你的应用使用了 Spring 的 WebFlux 功能,那么是不支持 war 包部署的。

    配置调整

    1. 修改 pom.xml 中的打包方式

    <packaging>war</packaging>
    

    2. 调整依赖

    <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
           <exclusions>
                <exclusion>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-starter-tomcat</artifactId>
             </exclusion>
        </exclusions>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-tomcat</artifactId>
       <!-- 该包只在编译和测试的时候使用 -->
        <scope>provided</scope>
    </dependency>
    

    3. 继承 SpringBootServletInitializer

    @SpringBootApplication
    public class AppQuickStart extends SpringBootServletInitializer {
    
        private static Logger logger = LoggerFactory.getLogger(AppQuickStart.class);
    
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName());
            logger.info("app begin to start...");
            SpringApplication.run(AppQuickStart.class, args);
            logger.info("app start success...");
        }
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(AppQuickStart.class);
        }
    }
    

    4. 一些其他注意点

    下面是 build 的配置,主要是设置了应用的名称,还用就是加了maven-war-plugin这个插件,不然会报找不到web.xml这个错误。

    <build>
         <finalName>appName</finalName>
        <!-- 省略其他配置 -->
        <plugins>
            <plugin>
                <configuration>
                    <excludeDevtools>true</excludeDevtools>
                </configuration>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    好了,到此就可以执行mvn clean install命令打包了。

    报 404 问题

    网上有很多文章说 Spring Boot 应用打成 war 部署 Tomcat 后访问接口会报 404 错误。如果你是完全上面的步骤配置的不应该会有问题。

    假如真的有问题,建议从下面几方面来解决:

    • URL 有没有写对:部署 Tomcat 后是需要填写 context-path 的,这个 context-path 并不是 Spring Boot 中配置的,而是 Tomcat 中配置的,如果你没对 Tomcat 做特殊的配置,那么这个 context-path 就是你打包好的项目的名称;
    • 检查接口参数有没传对;
    • 终极办法,打开日志的 Dubug 级别,一般问题都能看出来,如果你日志是 info 级别,你的全局异常处理没做到位,有些异常是看不出来的。

    说明

    本文基于 Tomcat 9 和 Spring Boot 2.0.0.Release 版本

    人生的主旋律其实是苦难,快乐才是稀缺资源。在困难中寻找快乐,才显得珍贵~
  • 相关阅读:
    HierarchicalDataTemplate
    Prism技巧
    常用Exception
    netcore URL重新路径
    Nintendo Switch相册整理
    交换变量-不借助任何变量
    QCombobox样式stylesheet总结
    Qt新旧Moc方式升级功能
    QSS使用方法总结
    【QRegExp】QLineEdit屏蔽空格
  • 原文地址:https://www.cnblogs.com/54chensongxia/p/13730179.html
Copyright © 2011-2022 走看看