天天看點

Springboot打war包部署到tomcat中!

查詢Springboot項目打war包的方法,在網上有很多,但是主要的思路都是将springboot中内置的tomcat去掉,重寫啟動主方法,多查查總有一款是适合你的,我就是查了大概一周!!!困惑了一周!!!!也看到許多人問也是按照網上的方法去設定依賴,重寫方法,為什麼不好用呢,我剛開始也是這樣,但是我建立了一個小的springboot項目去試了一下網上的方法,是可以使用,下面寫出需要更改的地方。

去掉内置的tomcat,有兩個方法:

方法一、這個親測好用

<packaging>war</packaging>

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

方法二、這個我沒有試驗

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

 因為springboot是沒有web.xml檔案的,是以需要一下設定。你也可以試試給springboot添加web.xml。

<build>
        <finalName>learnspringboot</finalName> 
                <!--打包後war包的名稱-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <!--如果想在沒有web.xml檔案的情況下建構WAR,請設定為false。-->
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
           

下面重寫啟動類: 

@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(DemoApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
           

以上就可以将springboot項目進行打war包部署到tomcat中,但這個時候我自己的問題并沒有解決,我出現了很多小夥伴說的項目部署到tomcat中可以啟動,沒有任何錯誤,但是啟動報錯404,空白頁,通路不了等等,我的問題是這麼解決的,我是通路路徑問題,我的資料庫連接配接隻能識别/login,但是war包通路需要加上war包名稱,比如http://localhost:8080/learnspringboot/login,這樣我自己的攔截器在識别路徑的時候識别的是/learnspringboot/login,那就找不到登入資訊,就會跳到/error界面,問題分析原因都是通過對比tomcai啟動war的背景日志與在idea中啟動springboot的背景日志,以及代碼發現的。是以我隻要讓我通路的路徑是http://localhost:8080/login 那麼就是通路不需要加war名稱,那麼就在tomcat的server.xml中進行設定。

我的是這麼設定,可能跟網上的不太一樣,我不太懂差別,但是我自己的我用着好用哈。

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
		<Context docBase="/learnspringboot" path="" reloadable="true" crossContext="true"/>
        <!-- 上面這段是我插入标簽 docBase是war包名稱-->
        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->

        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
           

然後我的就可以通路成功,如果大家遇到相似的問題,大家一定要耐心看差別,因為網上查的部署方法,是有好用的,可能你的項目本身建設影響了你的通路,如果對大家有幫助那就太好了,因為我在這憋了太久了,如果有不對請指出,本人也隻是個新手,本文也是參考了好多大神的文章。。。

繼續閱讀