zoukankan      html  css  js  c++  java
  • springboot项目打包、部署Tomcat流程详解

    项目打包
    1.移除springboot内置tomcat,在pom文件中找到spring-boot-starter-web依赖,替换成以下依赖。(仅在项目打包时移除内置tomcat)

    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
         <!-- 移除嵌入式tomcat插件 打包的时候开启-->
         <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>
        <!-- provided代表该依赖参与编译和运行,打包的时候排除该依赖 -->
        <!-- 默认为compile代表后续运行,测试,打包都会被包含进去-->
        <!-- 默认为runntime代表只有运行会被包含进去-->
        <!-- 默认为system代表从本地文件系统获取依赖,配合systempath使用-->
        <scope>provided</scope>
    </dependency>


    2.启动类继承SpringBootServletInitializer


    3.修改pom文件的打包类型(jar、war)


    4.使用maven管理生命周期中的clean和package打包项目(这里演示的是单模块项目)

    打包过程中,就会出现下列错误。

    Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.4.1:repackage failed: Unable to find main class
    错误原因:使用maven提供spring boot的打包插件spring-boot-maven-plugin情况下,该插件会寻找项目中的主方法入口,但是在刚刚继承SpringBootServletInitializer类时,我们注释掉了主方法入口,所以导致打包失败。

    解决方法:
    1.使用普通的maven项目打包插件同时注释掉springboot项目的打包插件。

    <plugin>

                    <groupId>org.apache.maven.plugins</groupId>

                    <artifactId>maven-war-plugin</artifactId>

                    <version>3.0.0</version>

                    <configuration>

                    <!-- 打包时监测是否有web.xml文件,当为true时,项目可能会因为没有web.xml文件部署失败,这里关掉监测 -->

                        <failOnMissingWebXml>false</failOnMissingWebXml>

                        <warName>${project.artifactId}</warName>

                    </configuration>

                </plugin>

    2.springboot启动类取消继承SpringBootServletInitializer同时在同级下创建Xxx(Xxx为项目名,就是你springboot启动类Application前面的项目名称)ServletIntializer类继承SpringBootServletInitializer,这样就既有主方法入口,也有SpringBootServletInitializer在外置的Tomcat服务器中映射路径。

    打包成功后,可以在target文件夹下找到对应的jar包或者war包。

    接下来开始部署war包。(如果是jar包,则打开命令行窗口,进入jar所在文件位置输入并执行java -jar 包名.jar就可以运行了)

    部署流程
    1.首先打开本地的tomcat所在文件地址,找到webapps文件夹,将打包好的war粘贴到webapps文件夹中

     

    2.然后进入bin文件夹中找到startup.bat文件,双击运行或者右键管理员运行。

     

     

    访问项目,正常访问即部署成功
    部署问题集合(重要)
    1.明明startup启动tomcat成功,war包也成功被编译,为什么访问对应路径或者接口会出现http404错误,该资源不存在或者没有权限访问。
    原因:开发中,如果我们在项目的properties文件或者yml文件设置了项目的根路径或者端口号,用idea中的tomcat服务去运行项目,那么访问路径就是localhost:+配置文件中的端口号(默认80)+配置文件中的项目根路径(默认为/),所以当我们设置了端口号为8080,项目根路径为/xx时,那么我们访问资源的所有地址前面都要加上http://localhost:8080/xx+(/…我们的访问路径),遵守的是项目配置文件的规则。但是,如果打包成war包放在Tomcat上运行时,项目配置文件中的端口和根路径会失效。遵守的规则则是tomcat的bin目录下server.xml文件中的配置。项目根路径则是对应war包的包名。
    所以,当使用tomcat的startup去启动项目或者注册成服务启动项目时,我们访问的路径应该为http://localhost:+(tomcat配置文件的端口号,默认8080)+(项目根路径,则是/加上war包名)
    例如:
    博主本机的是没改动的,端口号为8080。项目根路径则为war包的包名

    <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-web</artifactId>     <!-- 移除嵌入式tomcat插件 打包的时候开启-->     <exclusions>     <exclusion>     <groupId>org.springframework.boot</groupId>-->                <artifactId>spring-boot-starter-tomcat</artifactId>        </exclusion>     </exclusions></dependency>

    学习时的痛苦是暂时的 未学到的痛苦是终生的
  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/grimm/p/15146310.html
Copyright © 2011-2022 走看看