Tomcat下部署SpringBoot


SpringBoot默認支持Tomcat7及以上版本(SpringBoot默認支持servlet3.1版本及以上,Tomcat6只支持到servlet2.5)

測試環境:jdk1.8 + tomcat7+SpringBoot2.1.0.M1  、 jdk1.8+ tomcat8.5+SpringBoot2.1.0.M1


1、在pom.xml文件中,把打包形式jar改為war

<packaging>war</packaging>


2、在pom.xml文件下去除內置tomcat

這里配置有兩種方法,一種是

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>      <!-- 移除嵌入式tomcat插件 -->    <exclusions>        <exclusion>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-tomcat</artifactId>        </exclusion>    </exclusions></dependency>

這種方法會直接移除內置tomcat,即本地開發也需要用自己配置的tomcat才行,用main方法運行會報錯。可參考最后一步進行修改,使用自己配置的tomcat進行開發調試;

另一種方式是,添加

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

這種方法依然可以使用內置的tomcat進行開發調試。


3、添加servlet-api的依賴

添加servlet-api有兩種方式,選其一即可

<dependency>    <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.1.0</version>    <scope>provided</scope></dependency>
<dependency>    <groupId>org.apache.tomcat</groupId>    <artifactId>tomcat-servlet-api</artifactId>    <version>8.0.36</version>    <scope>provided</scope></dependency>


4、修改啟動類

原先啟動SpringBoot是通過main方法啟動的,現在需要讓啟動類繼承SpringBootServletInitializer,並重寫configure方法,如


5、在pom.xml的build中添加項目打包后的名稱


6、打包部署

(1)、命令行打包

以命令行的形式進入到項目的目錄下,輸入如下命令(需在環境變量中配置maven路徑)

mvn clean package

出現如下圖示即說明打包成功


(2)、在eclipse中打包項目

右鍵點擊項目 - Run as - Maven build ,在彈窗中的Goals輸入package,點擊Run

即可自動打包。打包完成界面與命令行打包一致。


(3)、部署

打包文件在項目路徑下的target目錄里面,如

放置到tomcat的webapps目錄下,即可直接運行,需要注意的是,訪問路徑需要加上項目名的路徑,如下圖


7、eclipse中移除內置tomcat,運行項目可能遇到的問題

在第二步的時候,如果采用第一種方法移除了內置tomcat的話,在項目中運行時就需要選擇Run on server了。然后選擇tomcat服務器(需tomcat7以上),這時候有可能會遇到下面的錯誤。

出現這個錯誤的解決方法是,右鍵點擊項目 - properties -  Project Facets ,把Cloud Foundry Standalone Application的勾去掉。

接下去,就可以在eclipse中配置的tomcat上運行項目了。


8、讓springboot支持tomcat6的方法

springboot要支持servlet2.5,才可以在tomcat6中運行,讓springboot支持servlet2.5需用到spring-boot-legacy,該插件目前只支持到springboot2.0.3版本。

測試環境:tomcat6 + jdk 1.8 +Springboot 1.5.9.RELEASE

(1)、pom.xml中新增插件

在上面1-5步配置完后,繼續配置pom.xml。新增spring-boot-legacy依賴

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

(2)、在main目錄下新建webapp/WEB-INF/web.xml如下圖

(3)、復制下面內容到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>        <!-- 配置Application啟動類的具體位置         如啟動類在com.example.DemoApplication.java,則配置如下        -->        <param-value>com.example.DemoApplication</param-value>    </context-param>    <listener>        <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>    </listener>    <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>

(4)、打包部署,參照上面第6步

到此,導出的war包即可在tomcat6中運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM