国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 把spring boot項目發布tomcat容器(包含發布到tomcat6的方法)

把spring boot項目發布tomcat容器(包含發布到tomcat6的方法)

2021-01-30 12:28weixliu Java教程

這篇文章主要介紹了把spring boot項目發布tomcat容器(包含發布到tomcat6的方法),然后在文章給大家提到了如何將Spring Boot項目打包部署到外部Tomcat,需要的朋友參考下吧

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

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

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

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

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

?
1
2
3
4
5
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope>
</dependency>

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

?
1
2
3
4
5
6
7
8
9
10
11
@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包的所有步驟,可以發布至tomcat7及其以上版本。

但是以上流程改造完spring boot打包war包發布至tomcat6版本之后,瀏覽器訪問項目地址會給出404的錯誤?為什么呢,一頭霧水,經過我一番查閱資料以及實驗,得出以下結論,

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

但是又google了一番,發現已經有人在解決這個問題了,https://github.com/dsyer/spring-boot-legacy

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

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.手動替換web.xml文件。但是在發布war包中發現metricFilter提示空指針異常,我就簡單粗暴的將filter過濾了,注釋如下。 所要替換的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
<?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>

完成以上兩個步驟就可以讓spring boot項目支持tomcat6的部署了,解決。

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

PS:如何將Spring Boot項目打包部署到外部Tomcat

1.項目打包

    項目開發結束后,需要打包部署到外部服務器的Tomcat上,主要有幾種方式。

(1)生成jar包

?
1
2
3
4
5
cd 項目跟目錄(和pom.xml同級)
mvn clean package
## 或者執行下面的命令
## 排除測試代碼后進行打包
mvn clean package -Dmaven.test.skip=true

打包完成后jar包會生成到target目錄下,命名一般是 項目名+版本號.jar

啟動jar包命令

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

這種方式,只要控制臺關閉,服務就不能訪問了。下面我們使用在后臺運行的方式來啟動:

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

也可以在啟動的時候選擇讀取不同的配置文件

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

也可以通過IDEA的Maven工具生成,點擊Lifecycle-install,生成jar

(2)生成war包

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

?
1
<packaging>war</packaging>

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

?
1
2
3
4
5
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

  (3)注冊啟動類

  創建ServletInitializer.java,繼承SpringBootServletInitializer ,覆蓋configure(),把啟動類Application注冊進去。外部web應用服務器構建Web Application Context的時候,會把啟動類添加進去。

?
1
2
3
4
5
6
public class ServletInitializer extends SpringBootServletInitializer {
  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(BootdemoApplication.class);
  }
}

  同樣也是兩種方式執行:

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

  (2)通過IDEA的Maven工具生成,點擊Lifecycle-package,生成war

2.項目部署

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

總結

以上所述是小編給大家介紹的把spring boot項目發布tomcat容器(包含發布到tomcat6的方法),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://www.cnblogs.com/weixliu/p/6432342.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲午夜精品 | 天堂资源网 | 欧美日韩中文字幕在线 | 日韩精品一区二区三区四区 | 国产精品毛片 | 欧美一级一区 | 午夜精品一区 | 一区二区三区中文字幕 | 日本精品在线观看 | 日韩精品久久久久久 | 久久99这里只有精品 | 日本三级视频在线观看 | 亚洲男人在线 | 亚洲wu码| 日韩欧美一区二区三区免费观看 | 免费黄色成人 | 欧美一区第一页 | 成人三级视频网站 | 亚洲久久久久 | 日韩福利二区 | 午夜精品久久久久久久久久久久 | 日本精品一区二区三区视频 | 99在线播放 | 精品毛片 | 亚洲国产久 | 亚洲aaa在线观看 | 日韩视频免费 | 中国一级特黄毛片大片 | 久久99久久99精品免观看粉嫩 | 2019中文字幕视频 | 日韩三级黄色片 | 精品第一页 | 日韩成人在线播放 | 国产精品不卡视频 | 99在线热视频 | 国产精品女同一区二区免费站 | 久久伊99综合婷婷久久伊 | 中文字幕在线免费视频 | 中国黄色毛片 大片 | 国产成人黄色 | av网站在线免费观看 |