Jetty正在运行来自webapps
的3个网站。其中一个是静态"角网站,另一个是一个巨大的Java应用程序。
通常,我使用 Ctrl + c 来停止Jetty,在我的角度站点上进行更改,然后使用
启动Jettyjava -jar start.jar -DCommon.properties.path=C:\Jetty
如果我在Jetty运行时尝试编辑文件,则会注入随机的错误代码,从而破坏网站。
所以这个过程非常繁琐。 java应用需要15-20秒才能加载。因此,如果我忘记了斜线,则需要大约一分钟才能将其关闭并重新启动。
有没有办法可以一次只停止/启动webapps
中的一个而不是全部3个?
答案 0 :(得分:3)
您似乎在使用Windows。
您遇到的问题与Microsoft Windows独有的传统文件系统锁定行为有关(没有其他运行Java的操作系统会这样做)
请参阅有关它的官方文档 https://www.eclipse.org/jetty/documentation/current/troubleshooting-locked-files-on-windows.html
如果您遵循该文档中提出的建议,那么您就不需要停止/启动特定的Web应用程序。
重要:请注意,文档中的建议仅适用于开发时间,并且不适合生产。
从OP插入:
我按照上面文档中的说明进行操作,并且有效!这就是我的所作所为:
找到您的webdefault.xml文件。
打开它并搜索UseFileMappedBuffer
找到这个:
<init-param>
<param-name>useFileMappedBuffer</param-name>
<param-value>true</param-value>
</init-param>
<param-value>false</param-value>
话虽如此,如果你仍想沿着这条路走下去,还有两种方式......
<强> 1。使用hotreload
为您的&#34;重新加载&#34;创建可部署的XML。 webapp和touch
只需热重新加载1个webapp。
文件:${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命令将更新该文件的时间戳,Jetty会将其视为&#34;嘿,该文件已更新,我必须重新加载它&#34;
<强> 2。使用JMX停止/启动特定的Web应用程序
启动Jetty并激活JMX模块(--module=jmx
)。
启动JMX控制台(JDK附带jmc
和jconsole
)并连接到正在运行的Jetty实例。找到特定Web应用程序的MBean,并使用该特定Web应用程序上的stop()
和start()
命令。