外部Tomcat部署Spring Cloud項目

spring-cloud是基於spring boot的,默認提供內嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以啓動。但是,有時候我們更希望一個tomcat來管理多個項目,這種情況下就需要項目是war格式的包而不是jar格式的包。spring-boot同樣提供瞭解決方案,只需要簡單的幾步更改就可以了,這裏提供maven項目的解決方法。

因爲本文主要講的是部署方面的操作,所以本文不再講部署之前所需要在項目上所做的工作,具體的我這裏引用一篇別人的文章,大家可以先從這個文章入手,然後再部署。百家號有防廣告校驗,所以下邊的鏈接,請去掉問號之後訪問。

https://?www?.cnblogs?.com?/a8457013/p/7687792.html

要在tomcat上部署一個spring cloud微服務項目,首先我們要解決的是端口問題,我們都知道,微服務架構的系統,肯定是有多個端口的,還有,tomcat的端口問題,我們一般使用tomcat,是不是都會把war包或者文件夾直接扔在webapps下邊,server.xml裏面只有一個配置端口的地方。我們先來看看server.xml配置文件。

打開百度App,看更多圖片

server.xml

直接看這個service節點,有一個唯一名稱屬性name,還有一些子節點是配置端口的,一般情況的話,我們就只改這個8080端口,再把war包放webapps下邊就好了。

可以看到,service節點下邊有一個host節點,host節點的appBase屬性就是配置的項目路徑,這個路徑可以是絕對路徑,也可以是相對路徑,默認的appBase就是webapps。

我們的微服務一般是有多個服務的,所以我們就複製出多個service節點,給他賦予上不同的端口號,端口號是有兩個地方需要改的,這個得注意下,一個ajp,一個http。這裏貼一下我的配置文件,給大家看一下。

server.xm文件

<Host name="lcs-discover" appBase="shunfeng/discover/" unpackWARs="true" autoDeploy="true">

<Context path="" docBase="lcs-discover.war" reloadable="true" allowLinking="true" name="/lcs-discover"></Context>

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

這部分就是具體配置的微服務的配置了,path=""代表該微服務沒有上下文根,你也可以自己設置,一般不建議設置,因爲我們一般開發的時候,就是沒有這個上下文的,直接用server_name去掉其他服務的。docBase="lcs-discover.war"代表的是 appBase="shunfeng/discover/"下邊的具體war包服務文件。

這個是我的一個目錄結構,其他的服務就仿照這個來創建文件夾,也比較好管理,你也可以直接把文件夾放在代碼的target裏,代碼編譯後,war包也就生成了,可以快速更新代碼。/root/apache-tomcat-9.0.21/shunfeng/discover。

還有一個需要注意的點,就是我們配置了多個服務在一個tomcat裏,都沒有配置上下文,這樣的話,就會導致tomcat認爲他自己啓動了多個一樣的服務,會報錯,這時候只需要在Host節點下邊的Context節點屬性裏,加一個name,例如name="/lcs-discover"標明唯一性。並且yml配置文件裏增加

spring:

jmx:

enabled: false

就好了。

文章寫得不好,有什麼疑問就在下邊問吧,我這剛寫,寫得多了就好了。

 

本文是從我的百家號“老範教你玩電腦”轉載過來的,不是侵權。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章