久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

 instl 2018-06-26

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)生沖突,打開下面代碼中的注釋即可,。

1
2
3
4
5
6
7
8
9
10
11
12
<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)試,添加如下依賴即可,;

1
2
3
4
5
<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 方法,。代碼舉例如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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版本之后,瀏覽器訪問(wèn)項(xiàng)目地址會(huì)給出404的錯(cuò)誤,?為什么呢,,一頭霧水,經(jīng)過(guò)我一番查閱資料以及實(shí)驗(yàn),,得出以下結(jié)論,,

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

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

 

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

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

1
2
3
4
5
<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過(guò)濾了,,注釋如下,。 所要替換的web.xml文件的未知如下 : {工程目錄}/src/main/webapp/WEB-INF/web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java./xml/ns/javaee"
    xmlns:xsi="http://www./2001/XMLSchema-instance"
    xsi:schemaLocation="http://java./xml/ns/javaee http://java./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封裝帶來(lái)了便利性,,同時(shí)也帶來(lái)了出問(wèn)題的解決復(fù)雜度,,如果不了解原始的spring web開發(fā)模式,出現(xiàn)問(wèn)題很難解決,。即使我現(xiàn)在解決了支持tomcat6的spring boot支持問(wèn)題,,但是不太明白解決的原理,filter出現(xiàn)空指針是為什么,?所以深入一些原理性的東西,,學(xué)習(xí)技術(shù)的基礎(chǔ)性的東西非常重要。大家可以明白的可以解釋解釋2.5支持的原理,,以及filter空指針的異常原因,。

 

最后感謝前輩們的資料,

參考資料:  

1.如何讓 Spring Boot 項(xiàng)目發(fā)布到 Tomcat 服務(wù)器(李威威)

2.springboot 開發(fā)入門,,及問(wèn)題匯總

              

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多