如何只停止一个应用程序?

时间:2017-07-06 20:49:21

标签: jetty

Jetty正在运行来自webapps的3个网站。其中一个是静态"角网站,另一个是一个巨大的Java应用程序。

通常,我使用 Ctrl + c 来停止Jetty,在我的角度站点上进行更改,然后使用

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

如果我在Jetty运行时尝试编辑文件,则会注入随机的错误代码,从而破坏网站。

所以这个过程非常繁琐。 java应用需要15-20秒才能加载。因此,如果我忘记了斜线,则需要大约一分钟才能将其关闭并重新启动。

有没有办法可以一次只停止/启动webapps中的一个而不是全部3个?

1 个答案:

答案 0 :(得分:3)

您似乎在使用Windows。

您遇到的问题与Microsoft Windows独有的传统文件系统锁定行为有关(没有其他运行Java的操作系统会这样做)

请参阅有关它的官方文档 https://www.eclipse.org/jetty/documentation/current/troubleshooting-locked-files-on-windows.html

如果您遵循该文档中提出的建议,那么您就不需要停止/启动特定的Web应用程序。

  

重要:请注意,文档中的建议仅适用于开发时间,并且不适合生产。

从OP插入:

我按照上面文档中的说明进行操作,并且有效!这就是我的所作所为:

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

    • 我在C:\ Place_where_Jetty_was_installed \ Jetty \ etc \
  2. 打开它并搜索UseFileMappedBuffer

  3. 找到这个: <init-param> <param-name>useFileMappedBuffer</param-name> <param-value>true</param-value> </init-param>

  4. 将param-value设置为false <param-value>false</param-value>
  5. 话虽如此,如果你仍想沿着这条路走下去,还有两种方式......

    <强> 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附带jmcjconsole)并连接到正在运行的Jetty实例。找到特定Web应用程序的MBean,并使用该特定Web应用程序上的stop()start()命令。

相关问题