关闭后,作为Windows服务运行的Jetty不会清理临时文件

时间:2019-07-09 07:10:07

标签: java windows service jetty

我正在将Jetty 9.4.11.v20180605作为带有procrun的Windows服务运行。当我启动该服务时,Jetty将战争提取到temp文件夹中。但是当我关闭该服务时,Jetty并不会自行删除这些文件。

为防止启动行为,我更改了start.ini并将jetty.deploy.extractWars设置为false。它会执行应有的操作,但是当我调用webapp时,我收到了HTTP错误503(服务不可用)。

我尝试的第二个步骤是在这样的xml文件中配置WebAppContext:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
   <Set name="persistTempDirectory">false</Set>
</Configure>

here所述,我将其编写在名为jetty-web.xml的文件中,并将其放入Webapp的WEB-INF文件夹中,并且可以运行,但是当我在浏览器中调用webapp时,它仅显示我的Web应用程序的文件夹结构。当我将下面的行放入jetty-web-cdi2.xml中进行服务器配置时,也会发生同样的情况。

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

来自documentation

  

/ opt / jetty / temp目录被创建为Jetty用于临时目录和工作目录的持久位置。许多Unix系统会定期清除/ tmp目录,这种行为在Servlet容器中是不希望的,并且已知会引起问题。 / opt / jetty / temp中的持久目录可以解决该问题。

对于码头的单元测试似乎很多,其中包括临时文件,还有一些专门用于检查临时文件是否被删除的测试。

https://github.com/eclipse/jetty.project/blob/9706d70484863a014d3604e5e7cb4af40aa4cb1e/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/MultiPartServletTest.java#L135

文件可以具有退出时要删除的属性

https://github.com/eclipse/jetty.project/blob/9706d70484863a014d3604e5e7cb4af40aa4cb1e/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java#L792

总而言之,Jetty似乎需要长期使用的临时文件,因此最好在不再需要它们时清理它们。

答案 1 :(得分:0)

也许码头想这样做,但实际上我不希望这样做。我的一个客户每天晚上都会重新启动运行Webapp的服务器,因此jettys temp文件夹会变得很大而没有任何间隙。因此,我必须为此找到一种解决方法,

我使用Windows temp文件夹让码头打开战争的包裹。您可以通过在命令行中键入%TMP%来获得基于用户的目录。 Windows中的标准设置不会自动清除此文件夹。但是您可以使用Windows中的磁盘清理工具来手动清除它。在Windows 10中,您还可以启用对temp文件夹的自动清理:“ Windows设置”->“系统”->“存储”->启用“存储检测”。 如果您使用磁盘清理工具清除temp文件夹,则不会触摸当前使用的jetty文件夹和属性文件,因此清理后webapp仍在工作。

相关问题