Tomcat 部署項目細節深刻研究

 我剛花了2個多小時反編譯看了下代碼,應該是這樣的過程,好精妙的web

 

Part 1 在應用的META-INF/context.xml下面配置數據源的必要性 spring

 

Tomcat的部署應用過程在HostConfig目錄下的deployApps() 方法中tomcat

 


 

 


 

實際就是作了如下結果事情->多種部署tomcat應用的方式app

(1)      部署 %CATALINA_HOME%/conf/Catalina/localhost 目錄下面的 .xml   webapp

deployDescriptors(configBase, configBase.list());ide

(2)     部署 %CATALINA_HOME%/webapps/ 目錄下以.war 結尾的文件 spa

deployWARs(appBase, filteredAppPaths); 3d

(3)     部署%CATALINA_HOME%/webapps 目錄下的目錄,也就是沒有打包的那些應用 orm

deployDirectories(appBase, filteredAppPaths); xml

 

而咱們的問題就在第二種和第三種部署方式裏面,

deployWARs (部署全部的war)裏面是一個for循環,來依次調用deployWAR( 部署單個war)

deployWAR , 貼上代碼


 

不難發現,他會打開一個字節流從 war文件中讀取 META-INF/context.xml 文件,而後把它 copy

      %CATALINA_HOME%/conf/Catalina/localhost/下於war應用名稱相對應的xml文件中,也就是這裏的


也就是%CATALINA_HOME%/conf/Catalina/localhost

 

因此,這個目錄,仍是必要的。

 

 

Part 2tcServerTomcat的關係:

tcServer不一樣於普通的tomcat,他的%CATALINA_HOME%/conf/Catalina/localhost 根本沒有,實際上是這樣的,他很精妙的吧部署目錄指向了

%TCSERVER_HOME%\spring-insight-instance,爲何這麼說呢?

%TCSERVER_HOME%\tcruntime-ctl.bat

 

也就是說INSTANCE_BASE 設爲了當前目錄,也就是%TCSERVER_HOME%


素因此咱們能夠看到,CATALINA_BASECATALINA_HOME都被設置爲了%TCSERVER_HOME%/%1 ,而這個%1是第一個參數spring-insight-instance,因此CATALINA_BASECATALINA_HOME都被設置爲%TCSERVER_HOME%/spring-insight-instance

下面就迎刃而解了。

 

Part 3:驗證結論

咱們在%TCSERVER_HOME% \spring-insight-instance\conf\Catalina\localhost 下果真找到了estore.xml, 符合<項目名>.xml的風格


打開看下, 發現裏面的內容正是從META-INF/context.xml中複製來的,而且用docBase指向了來源。因而Part 1的論點獲得證實。對比下面兩張圖

 

estore.xml


META-INF/context.xml


 

而後tcServer就可依據estore.xml來部署estore應用

相關文章
相關標籤/搜索