SpringBoot項目打包發(fā)布到外部tomcat會遇到什么問題

小編給大家分享一下SpringBoot項目打包發(fā)布到外部tomcat會遇到什么問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)成立以來不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術為基點,以客戶需求中心、市場為導向”的快速反應體系。對公司的主營項目,如中高端企業(yè)網站企劃 / 設計、行業(yè) / 企業(yè)門戶設計推廣、行業(yè)門戶平臺運營、手機APP定制開發(fā)、成都做手機網站、微信網站制作、軟件開發(fā)、成都棕樹機房等實行標準化操作,讓客戶可以直觀的預知到從成都創(chuàng)新互聯(lián)可以獲得的服務效果。

先說遇到問題的情景:

初次嘗試使用spring boot框架寫了個小web項目,在Intellij IDEA中能正常啟動運行。使用maven 運行install,生成war包,發(fā)布到本機的tomcat下,出現異常,主要的異常信息是  .......LifeCycleException。經各種搜索,找到答案。

spring boot因為內嵌tomcat容器,所以可以通過打包為jar包的方法將項目發(fā)布,但是如何將spring boot項目打包成可發(fā)布到tomcat中的war包項目呢?

1. 既然需要打包成war包項目,首先需要在pom.xml文件中修改打包類型,將spring boot默認的<packaging>jar</packaging>修改為<packaging>war</packaging>形式;

2. 其次spring boot的web項目中內嵌tomcat服務器,所以如果我們想要發(fā)布war包到tomcat項目,要講spring boot中內嵌的tomcat包依賴排除,不然產生沖突,打開下面代碼中的注釋即可。

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

有一點想說的是,如果本地開發(fā)的時候依然想要使用spring boot內嵌tomcat進行調試,添加如下依賴即可;

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

3. spring boot發(fā)布jar包web程序的入口是main函數所在的類,使用@SpringBootApplication注解。但是如果war包發(fā)布至tomcat,需要增加 SpringBootServletInitializer 子類,并覆蓋它的 configure 方法,或者直接將main函數所在的類繼承 SpringBootServletInitializer 子類,并覆蓋它的 configure 方法。代碼舉例如下,

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
   
  @Override
  protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) {
    return application.sources(DemoApplication.class);
  }
 
   
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

以上就完成了spring boot項目打包war包的所有步驟,可以發(fā)布至tomcat7及其以上版本。

最后還有最重要的一點,如果你本機的tomcat版本和  springboot自動集成的8.0版本不一致。也會出問題,解決辦法 :

我本地的Tomcat版本是8.0.28, 而服務器上的Tomcat是7.0.69。 我在本地下了個Tomcat7.0.70部署也報同樣錯誤。更加確定問題跟Tomcat版本有關。經過多方查找資料,最后在Stackoverflow上看到一個老外說SpringBoot默認Servlet容器是基于Tomcat8的

在打好的war包中確實發(fā)現了Tomcat相關jar包,而且是Tomcat8的,拿Tomcat8的embed包在Tomcat7下面那肯定是不能用啊 

SpringBoot項目打包發(fā)布到外部tomcat會遇到什么問題

要支持低版本Tomcat需要在maven中指定Tomat版本,配置如下:

<properties>
  <tomcat.version>7.0.69</tomcat.version>
</properties>

然后依賴中加上(這個其實不加也行, 官方文檔是加上的)

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-juli</artifactId>
  <version>${tomcat.version}</version>
</dependency>

加上以后試了下,果然是沒問題了。看了下war包中的lib目錄,確實已經變成Tomcat7的包了 

SpringBoot項目打包發(fā)布到外部tomcat會遇到什么問題

但是我還是有點疑惑, 這樣配置打成包豈不是換個Tomcat版本就要重新打次包? 既然是由于SpringBoot內部的Servlet容器造成了這個限制, 那我不用行不行? 又查了很多資料, 還真有辦法!

<!-- 打war包時加入此項, 告訴spring-boot tomcat相關jar包用外部的,不要打進去 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope>
</dependency>

以上是“SpringBoot項目打包發(fā)布到外部tomcat會遇到什么問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當前名稱:SpringBoot項目打包發(fā)布到外部tomcat會遇到什么問題
文章源于:http://bm7419.com/article2/igdsic.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供品牌網站建設、網站導航、建站公司、關鍵詞優(yōu)化、網站維護

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司