最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot項(xiàng)目打包發(fā)布到外部tomcat(出現(xiàn)各種異常的解決)

 更新時(shí)間:2019年09月30日 15:25:34   作者:Glory_mm  
這篇文章主要介紹了SpringBoot項(xiàng)目打包發(fā)布到外部tomcat(出現(xiàn)各種異常的解決),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

先說(shuō)遇到問題的情景:

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

spring boot因?yàn)閮?nèi)嵌tomcat容器,所以可以通過(guò)打包為jar包的方法將項(xiàng)目發(fā)布,但是如何將spring boot項(xiàng)目打包成可發(fā)布到tomcat中的war包項(xiàng)目呢?

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

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

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

有一點(diǎn)想說(shuō)的是,如果本地開發(fā)的時(shí)候依然想要使用spring boot內(nèi)嵌tomcat進(jìn)行調(diào)試,添加如下依賴即可;

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

3. spring boot發(fā)布jar包web程序的入口是main函數(shù)所在的類,使用@SpringBootApplication注解。但是如果war包發(fā)布至tomcat,需要增加 SpringBootServletInitializer 子類,并覆蓋它的 configure 方法,或者直接將main函數(shù)所在的類繼承 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項(xiàng)目打包war包的所有步驟,可以發(fā)布至tomcat7及其以上版本。

最后還有最重要的一點(diǎn),如果你本機(jī)的tomcat版本和  springboot自動(dòng)集成的8.0版本不一致。也會(huì)出問題,解決辦法 :

我本地的Tomcat版本是8.0.28, 而服務(wù)器上的Tomcat是7.0.69。 我在本地下了個(gè)Tomcat7.0.70部署也報(bào)同樣錯(cuò)誤。更加確定問題跟Tomcat版本有關(guān)。經(jīng)過(guò)多方查找資料,最后在Stackoverflow上看到一個(gè)老外說(shuō)SpringBoot默認(rèn)Servlet容器是基于Tomcat8的

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

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

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

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

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

加上以后試了下,果然是沒問題了??戳讼聎ar包中的lib目錄,確實(shí)已經(jīng)變成Tomcat7的包了 

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

<!-- 打war包時(shí)加入此項(xiàng), 告訴spring-boot tomcat相關(guān)jar包用外部的,不要打進(jìn)去 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope>
</dependency>

試了下, 加上這個(gè)后, 上面說(shuō)Tomcat的版本無(wú)需指定了, 耶! ^_^

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

临潭县| 三都| 清河县| 陇川县| 稻城县| 新河县| 南郑县| 婺源县| 闽侯县| 剑阁县| 朝阳市| 紫金县| 正宁县| 绥滨县| 长沙县| 屏东市| 呼图壁县| 吐鲁番市| 东乌珠穆沁旗| 漳浦县| 年辖:市辖区| 象州县| 乐山市| 宜春市| 扎赉特旗| 达州市| 陵川县| 仙桃市| 靖西县| 会昌县| 永康市| 石阡县| 永州市| 大足县| 疏附县| 淮阳县| 东港市| 河间市| 永川市| 偃师市| 福清市|