springboot項目部署到tomcat步驟以及常見問題


------------恢復內容開始------------

本文分為兩個部分,一,是打包的步驟,二,是我項目中所遇到的問題以及解決方法

 

一. 打包為war包步驟

1.修改打包方式為war

在pom.xml文件中將打包格式修改為war格式

 <packaging>war</packaging>

 

2.移除springboot自帶的tomcat插件

在pom.xml里找到spring-boot-starter-web依賴節點,將其中包含的tocat去除

  <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>

 如果在測試時還是想以springboot方式啟動,可以再加入依賴,強烈建議該方式

<!--只在測試和編譯時使用,在平時調試時使用-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

 

3. 添加servlet-api的依賴

以下兩種依賴隨意添加一個

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

4. 修改啟動類,並且重寫初始化方法

  springboot項目一般都有一個啟動類來啟動項目,而部署到tomcat不能通過該方式啟動,所以需要改變啟動方式,在啟動類的同級包下添加一個初始化類,並且繼承SpringBootServletInitializer

如下:

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意這里要指向用main方法執行的Application啟動類
        return builder.sources(VpnManagementSystemApplication.class);

    }
}

  接下來就可以打包成war包部署了,打開命令窗口,選擇powershell命令,然后在命令行里輸入: mvn clean package即可,然后去項目的目錄下的target下就可以看到已經打包好的war包。

 

二.  常見問題

  springboot項目在idea中放在tomcat中也是可以運行的,idea中配置一個tomcat來運行項目,最好和服務器版本一樣,測試環境和開發環境一樣才好尋找問題解決問題,以下問題都是我遇到的,以及有效的解決方法,可能

對於你的項目來說沒用,歡迎討論。

1.jar包沖突問題

  在springboot項目的項目中需要手動添加的一些包可能tomcat已經存在,這時就需要刪除這些包,否則就會報錯,甚至項目直接啟動不起來比如在springboot項目下用jsp頁面,這時需要添加的依賴包在

tomcat已經存在,就會報錯,如下包

<dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-jasper</artifactId>
</dependency>-->

  所以在部署到tomcat報錯時,一定要考慮依賴沖突問題。

 

2.使用pagehelper時,springboot方式啟動時正常,放到tomcat出現:“在系統中發現了多個分頁插件,請檢查系統配置!” 問題

  該問題出現的原因在於maven的pagehelper-spring-boot-starter這個依賴,提供了自動配置分頁插件的功能,而我們還添加了如下依賴,所以就報錯,但是不添加如下依賴項目就直接找不到包,

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.12</version>
</dependency>

  通過在springboot啟動類加上如下注解去掉自動配置解決

@SpringBootApplication(exclude = PageHelperAutoConfiguration.class)

 

3,當你在idea的tomcat啟動正常,但是手動將war包放入tomcat放入webapp目錄時啟動一直報錯

  該問題也就是,將2個項目部署到tomcat,第一個啟動正常,后面一個就報錯,而只啟動其中任意一個項目都不會報錯

  在2個項目的配置文件application.yml中,各加入spring.jmx.default-domain = 項目名1,spring.jmx.default-domain = 項目名2 , 再次打成war,並都部署到同一個tomcat的webapps下,

啟動正常!

 

  這是本人的第一篇博客,遇到的問題都是我自己遇到並且實測有用的方法,歡迎討論。本文方法借鑒於如下幾個鏈接,當你還有問題時不妨查看如下鏈接試試:

  https://blog.csdn.net/wang__dream/article/details/80372025

  https://blog.csdn.net/qq_34381084/article/details/81485319

  https://www.cnblogs.com/jpfss/p/9723828.html

  https://www.jianshu.com/p/18ae492099ca

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM