我的應用程序上下文被定義爲位於my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml
中的XML文件。如何在使用自定義上下文時使用URL API部署Tomcat應用程序
<Context docBase='/my/path/to/myApp/myAppWarFile.war'>
<Environment name='my_config_dir' value='/my/path/to/myApp' type='java.lang.String'/>
</Context>
/my/path/to/myApp
包含WAR文件myAppWarFile.war和一些外在屬性由春讀取。
Tomcat配置爲關閉autoDeploy。當我啓動Tomcat時,它創建了my/path/to/Tomcat/conf/webapps/my-app/
,並且WAR文件按預期方式被解壓到這個位置,當然應用程序可以按預期運行。
當我想在不重新啓動Tomcat的部署一個新的版本,我運行undeploy命令如下:
curl http://localhost:8080/manager/text/undeploy?path=/my-app --user my-username:my-password
...這工作。但是當我指示Tomcat使用下面的curl語句進行部署時,我得到了一個失敗。
curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml --user my-username:my-password
# Tomcat response
FAIL - Invalid context path null was specified
添加路徑沒有多大幫助,我仍然失敗。
curl http://localhost:8080/manager/text/deploy?config=file:/my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml\&path=/my-app --user my-username:my-password
# Tomcat response
FAIL - Failed to deploy application at context path /my-app
最糟糕的是尾巴catalina.out沒有產生任何見解。最重要的是,Tomcat刪除了應用程序上下文XML文件my/path/to/Tomcat/conf/Catalina/localhost/my-app.xml
!
當然,我已閱讀了Tomcat文檔(https://tomcat.apache.org/tomcat-8.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22.xml%22_file),並且我已經整天搜索了一遍,但我沒有發現任何可以幫助我處理這種特定配置的東西。
這感覺就好像選擇是:
- 用的Tomcat上自動部署(不推薦用於生產)在這種情況下,只需放下新戰爭
/my/path/to/myApp/
將導致Tomcat的熱部署應用程序。 - 關閉了autoDeploy的Tomcat,但重新部署需要Tomcat重新啓動,因爲部署API似乎不像廣告中那樣工作。
有沒有人做過這種配置工作?
編輯:
我打開了卡塔利娜登錄。當我不帶路徑運行第一個部署命令,我得到這組日誌條目:
FINE: Start processing with input [config=file:/my/apth/to/tomcat/conf/Catalina/localhost/my-app.xml]
Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process
FINE: Socket: [[email protected]:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [OPEN]
Oct 13, 2015 10:04:53 AM org.apache.coyote.http11.AbstractHttp11Processor process
FINE: Error parsing HTTP request header
java.io.EOFException: Unexpected EOF read on the socket
at org.apache.coyote.http11.Http11Processor.setRequestLineReadTimeout(Http11Processor.java:168)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:982)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
Oct 13, 2015 10:04:53 AM org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process
FINE: Socket: [[email protected]:Socket[addr=/0:0:0:0:0:0:0:1,port=45415,localport=8080]], Status in: [OPEN_READ], State out: [CLOSED]
Oct 13, 2015 10:04:53 AM org.apache.tomcat.util.threads.LimitLatch countDown
FINE: Counting down[http-bio-8080-exec-16] latch=1
還沒有,但我可以給它一個鏡頭。 my-app.war已經位於tomcat服務器上,由一個可執行的腳本刷新。此外,WAR的路徑和名稱在tomcat應用程序上下文XML文件中定義。出於這個原因,我被引導認爲當我使用deploy命令時,Tomcat的行爲與啓動時的行爲相同。 – Philippe
對不起,沒有運氣。從tomcat的手冊中,「當可選的war參數設置爲Web應用程序的URL」.war「文件或目錄時,它將覆蓋在上下文配置」.xml「文件中配置的任何docBase。」 (https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html#Deploy_using_a_Context_configuration_%22。XML%22_file)。正如我在問題中所述,WAR路徑是在上下文配置XML文件中指定的。 – Philippe