我已阅读 this post 并确保将 TEMP 和 TMP 的系统和用户变量分别设置为 C:\Temp 和 C:\tmp。我已经重新启动了两次机器,但是当我的应用程序调用 System.getProperty("java.io.tmpdir")
时,它一直指向 C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp
。为什么要这样做,我怎样才能让它指向 C:\Temp 或 C:\tmp? TIA
编辑:
我也尝试从 cmd 窗口执行 set -Djava.io.tmpdir=C:\Temp
并且仍然得到相同的结果。
答案 0 :(得分:7)
Tomcat 安装目录中的 bin\catalina.bat
是以下几行:
if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
:gotTmpdir
您可以设置环境变量 CATALINA_TMPDIR
或修改此文件。
答案 1 :(得分:1)
“我也尝试从 cmd 窗口执行 set -Djava.io.tmpdir=C:\Temp 并且仍然得到相同的结果。”
Tomcat 本身将 java.io.tmpdir
属性中的 System
属性设置为 CATALINA_TMPDIR
environment 变量设置为的任何值。这发生在 Tomcat 启动期间,它会覆盖您的 -D
设置。
所以简单的解决方案是(如 this answer 中所述)要么在启动 Tomcat 的环境中设置 CATALINA_TMPDIR
,或 修改 catalina.bat
文件(或 Linux 上的 catalina.sh
文件)。前者会更可取。如果可以,最好保持 Tomcat 安装树“原始”。
另一方面,如果您希望您的网络应用程序使用(例如)“C:\Temp”来处理某些的事情,同时仍然让网络容器的其余部分使用 {{1}其余的,您的 webapp 代码可以使用(例如)
java.io.tmpdir
代替
Files.createTempFile(Path dir, String prefix, String suffix,
FileAttribute<?>... attrs)
即告诉它在创建临时文件时要使用哪个临时目录。 (如果临时文件是在第 3 方代码中创建的,那可能会很尴尬。)
最后要注意的一点是,如果您在启用了强制执行的 SELinux 系统上运行 Tomcat,则 Tomcat 服务(默认情况下)会限制它可以读取和写入文件的位置。如果您打算使用替代的“临时”位置,则可能需要调整 SELinux 策略。