欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

把spring boot項(xiàng)目發(fā)布tomcat容器(包含發(fā)布到tomcat6的方法)

 更新時(shí)間:2017年11月06日 10:20:51   作者:weixliu  
這篇文章主要介紹了把spring boot項(xiàng)目發(fā)布tomcat容器(包含發(fā)布到tomcat6的方法),然后在文章給大家提到了如何將Spring Boot項(xiàng)目打包部署到外部Tomcat,需要的朋友參考下吧

spring boot因?yàn)閮?nèi)嵌tomcat容器,所以可以通過打包為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)想說的是,如果本地開發(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及其以上版本。

但是以上流程改造完spring boot打包war包發(fā)布至tomcat6版本之后,瀏覽器訪問項(xiàng)目地址會(huì)給出404的錯(cuò)誤?為什么呢,一頭霧水,經(jīng)過我一番查閱資料以及實(shí)驗(yàn),得出以下結(jié)論,

首先spring boot支持的servlet容器如下,可以看出spring boot最低支持的servlet版本是3.0,但是tomcat6的servlet版本是2.5,這樣的話上面的流程是無法支持tomcat6發(fā)布spring boot項(xiàng)目的,

但是又google了一番,發(fā)現(xiàn)已經(jīng)有人在解決這個(gè)問題了,https://github.com/dsyer/spring-boot-legacy,

標(biāo)題就表明了它是為了讓spring boot支持servlet2.5,剛好解決我們的痛點(diǎn),使用步驟如下:

1. pom.xml中添加spring-boot-legacy的依賴,

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-legacy</artifactId>
  <version>1.1.0.RELEASE</version>
</dependency>

2.手動(dòng)替換web.xml文件。但是在發(fā)布war包中發(fā)現(xiàn)metricFilter提示空指針異常,我就簡(jiǎn)單粗暴的將filter過濾了,注釋如下。 所要替換的web.xml文件的未知如下 : {工程目錄}/src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>com.example.DemoApplication</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
  </listener>
<!--
  <filter>
    <filter-name>metricFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>metricFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
-->
  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextAttribute</param-name>
      <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

完成以上兩個(gè)步驟就可以讓spring boot項(xiàng)目支持tomcat6的部署了,解決。

思考:spring boot封裝帶來了便利性,同時(shí)也帶來了出問題的解決復(fù)雜度,如果不了解原始的spring web開發(fā)模式,出現(xiàn)問題很難解決。即使我現(xiàn)在解決了支持tomcat6的spring boot支持問題,但是不太明白解決的原理,filter出現(xiàn)空指針是為什么?所以深入一些原理性的東西,學(xué)習(xí)技術(shù)的基礎(chǔ)性的東西非常重要。大家可以明白的可以解釋解釋2.5支持的原理,以及filter空指針的異常原因。

PS:如何將Spring Boot項(xiàng)目打包部署到外部Tomcat

1.項(xiàng)目打包

    項(xiàng)目開發(fā)結(jié)束后,需要打包部署到外部服務(wù)器的Tomcat上,主要有幾種方式。

(1)生成jar包

cd 項(xiàng)目跟目錄(和pom.xml同級(jí))
mvn clean package
## 或者執(zhí)行下面的命令
## 排除測(cè)試代碼后進(jìn)行打包
mvn clean package -Dmaven.test.skip=true

打包完成后jar包會(huì)生成到target目錄下,命名一般是 項(xiàng)目名+版本號(hào).jar

啟動(dòng)jar包命令

java -jar target/spring-boot-scheduler-1.0.0.jar

這種方式,只要控制臺(tái)關(guān)閉,服務(wù)就不能訪問了。下面我們使用在后臺(tái)運(yùn)行的方式來啟動(dòng):

nohup java -jar target/spring-boot-scheduler-1.0.0.jar &

也可以在啟動(dòng)的時(shí)候選擇讀取不同的配置文件

java -jar app.jar --spring.profiles.active=product

也可以通過IDEA的Maven工具生成,點(diǎn)擊Lifecycle-install,生成jar

(2)生成war包

  (1)修改打包類型為war:<packaging>war</packaging> 

 <packaging>war</packaging>

      (2)添加spring-boot-starter-tomcat依賴,scope設(shè)置為provided

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

 ?。?)注冊(cè)啟動(dòng)類

  創(chuàng)建ServletInitializer.java,繼承SpringBootServletInitializer ,覆蓋configure(),把啟動(dòng)類Application注冊(cè)進(jìn)去。外部web應(yīng)用服務(wù)器構(gòu)建Web Application Context的時(shí)候,會(huì)把啟動(dòng)類添加進(jìn)去。

public class ServletInitializer extends SpringBootServletInitializer {
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(BootdemoApplication.class);
  }
}

  同樣也是兩種方式執(zhí)行:

  (1)mvn clean package -Dmaven.test.skip=true

 ?。?)通過IDEA的Maven工具生成,點(diǎn)擊Lifecycle-package,生成war

2.項(xiàng)目部署

  無論是用哪種方式生成,最終都是為了進(jìn)行部署,war可以直接拷到tomcat的webapps目錄下,啟動(dòng)Tomcat即可。

總結(jié)

以上所述是小編給大家介紹的把spring boot項(xiàng)目發(fā)布tomcat容器(包含發(fā)布到tomcat6的方法),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • RabbitMQ排他性隊(duì)列Exclusive Queue詳解

    RabbitMQ排他性隊(duì)列Exclusive Queue詳解

    這篇文章主要介紹了RabbitMQ排他性隊(duì)列Exclusive Queue詳解,如果你想創(chuàng)建一個(gè)只有自己可見的隊(duì)列,即不允許其它用戶訪問,RabbitMQ允許你將一個(gè)Queue聲明成為排他性的Exclusive Queue,需要的朋友可以參考下
    2023-08-08
  • SpringMVC 參數(shù)綁定意義及實(shí)現(xiàn)過程解析

    SpringMVC 參數(shù)綁定意義及實(shí)現(xiàn)過程解析

    這篇文章主要介紹了SpringMVC 參數(shù)綁定意義及實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 兩行Javascript代碼生成UUID的方法

    兩行Javascript代碼生成UUID的方法

    這篇文章主要介紹了兩行Javascript代碼生成UUID的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • java.Net.UnknownHostException異常處理問題解決

    java.Net.UnknownHostException異常處理問題解決

    這篇文章主要介紹了java.Net.UnknownHostException異常處理方法,問題原因是在系統(tǒng)的?/etc/Hostname中配置了主機(jī)名,而在/etc/hosts文件中沒有相應(yīng)的配置,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-03-03
  • Java棧之鏈?zhǔn)綏4鎯?chǔ)結(jié)構(gòu)的實(shí)現(xiàn)代碼

    Java棧之鏈?zhǔn)綏4鎯?chǔ)結(jié)構(gòu)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java棧之鏈?zhǔn)綏4鎯?chǔ)結(jié)構(gòu)的實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • SpringBoot中GlobalExceptionHandler異常處理機(jī)制詳細(xì)說明

    SpringBoot中GlobalExceptionHandler異常處理機(jī)制詳細(xì)說明

    Spring Boot的GlobalExceptionHandler是一個(gè)全局異常處理器,用于捕獲和處理應(yīng)用程序中發(fā)生的所有異常,這篇文章主要給大家介紹了關(guān)于Java中GlobalExceptionHandler異常處理機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Nacos下線服務(wù)時(shí),下線報(bào)錯(cuò)選舉Leader失敗問題以及解決

    Nacos下線服務(wù)時(shí),下線報(bào)錯(cuò)選舉Leader失敗問題以及解決

    這篇文章主要介紹了Nacos下線服務(wù)時(shí),下線報(bào)錯(cuò)選舉Leader失敗問題以及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 解決Required request body is missing錯(cuò)誤的問題

    解決Required request body is missing錯(cuò)誤的問題

    這篇文章主要介紹了解決Required request body is missing錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Springboot?maven項(xiàng)目配置文件覆蓋問題的處理

    Springboot?maven項(xiàng)目配置文件覆蓋問題的處理

    這篇文章主要介紹了Springboot?maven項(xiàng)目配置文件覆蓋問題的處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a

    Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a

    這篇文章主要介紹了Java框架學(xué)習(xí)Struts2復(fù)選框?qū)嵗a,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02

最新評(píng)論