2017-07-06 60 views
1

碼頭運行3個站點從webapps。其中一個是「靜態」角度網站,另一個是一個巨大的Java應用程序。如何停止只有一個應用程序?

通常情況下,我用按Ctrl + C

java -jar start.jar -DCommon.properties.path=C:\Jetty 

停止碼頭,讓我的角部位的變化,並開始碼頭。如果我嘗試編輯文件,而碼頭的運行,隨機,越野車代碼被注入,破壞網站。

所以這個過程非常繁瑣。 Java應用程序需要15-20秒才能加載。所以如果我忘記了一個斜線,大約需要一分鐘才能關閉並重新啓動它。

有沒有辦法讓我一次只停止/啓動webapps而不是全部3個?

回答

2

您似乎正在使用Windows。

您遇到的問題,涉及到傳統靠不住的文件系統鎖定行爲所獨有的Microsoft Windows

https://www.eclipse.org/jetty/documentation/current/troubleshooting-locked-files-on-windows.html

如果查看它的官方文件(在運行Java的做到這一點沒有其他的OS)您遵循該文檔中提出的建議,那麼您不需要停止/啓動特定的Web應用程序。

重要:請注意,文檔中的建議是在開發時參考,不用於生產一個很好的通用配置。


從OP插入:

我跟着上面的文檔的方向,和它的工作!以下是我所做的:

  1. 找到您的webdefault.xml文件。

    • 我的是在C:\ Place_where_Jetty_was_installed \碼頭\等\
  2. 打開它,然後搜索UseFileMappedBuffer

  3. 找到這個: <init-param> <param-name>useFileMappedBuffer</param-name> <param-value>true</param-value> </init-param>

  4. 設置PARAM-值假 <param-value>false</param-value>

話雖這麼說,如果你還願意走這條路,有2種方式...

1。使用hotreload

爲您的「重新加載」Web應用程序創建一個可部署的XML,並且touch它將熱重新加載該Web應用程序。

文件:${jetty.base}/webapps/myapp.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
      "http://www.eclipse.org/jetty/configure_9_3.dtd"> 
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="contextPath">/myapp</Set> 
    <Set name="war"><Property name="jetty.webapps"/>myapp.war</Set> 
</Configure> 

然後使碼頭重載只是......

$ touch /path/to/myjettybase/webapps/myapp.xml 

此標準的POSIX命令將更新文件的時間戳,將由碼頭可以看到作爲「嘿,該文件更新,我必須重新加載它」

2.使用JMX停止/啓動特定的web應用程序

啓動JMX模塊處於活動狀態的Jetty(--module=jmx)。

啓動JMX控制檯(JDK附帶jmcjconsole)並連接到正在運行的Jetty實例。找到適合您特定webapp的MBean,並在該特定webapp上使用stop()start()命令。

+0

非常感謝。我還有一個簡單的問題:是否可以在'webdefault.xml'中改變一些東西來允許所有的http方法('POST','PUT','DELETE')? –

+0

這將是一個新問題 –

+0

好的,在這裏。謝謝! https://stackoverflow.com/questions/44979617/is-there-a-way-to-unlock-all-http-methods-without-changing-the-war-file –