当前位置: 首页 > 知识库问答 >
问题:

System.get属性(java.io.tmpdir)没有返回正确的位置

端木野
2023-03-14

我已经阅读了这篇文章,并确保将TEMP和TMP的系统变量和用户变量分别设置为C:\TEMP和C:\TMP。我已经重新启动了我的机器两次,但当我的应用程序调用系统时。getProperty(“java.io.tmpdir”)它一直指向C:\Program Files\Apache Software Foundation\Tomcat 8.5\temp。为什么要这样做?我如何才能让它指向C:\Temp或C:\tmp?TIA公司

编辑:
我也尝试过设置Djava。io。tmpdir=C:\Temp,我仍然得到相同的结果。

共有2个答案

杨赞
2023-03-14

“我也尝试过从cmd窗口执行set-Djava.io.tmpdir=C:\Temp,但仍然得到相同的结果。”

Tomcat本身正在将System属性中的java.io.tmpdir属性设置为CATALINA_TMPDIR环境html" target="_blank">变量设置为的任何值。这发生在Tomcat启动期间,它正在覆盖您的-D设置。

因此,简单的解决方案是(如本答案所述)在启动Tomcat的环境中设置CATALINA\u TMPDIR,或者修改CATALINA。bat文件(或Linux上的catalina.sh文件)。前者更可取。如果可以的话,最好保持Tomcat安装树“原始”。

另一方面,如果你想让你的webapp对某些东西使用(比如)“C:\Temp”,同时仍然让web容器的其余部分使用java。io。tmpdir对于其余部分,您的webapp代码可以使用(例如)

Files.createTempFile(Path dir, String prefix, String suffix,
                     FileAttribute<?>... attrs) 

而不是

Files.createTempFile(String prefix, String suffix, 
                     FileAttribute<?>... attrs)

i、 e.告诉它在创建临时文件时要使用哪个临时目录。(如果临时文件是用第三方代码创建的,这可能会很尴尬。)

最后要注意的是,如果您在启用了强制的SELinux系统上运行Tomcat,Tomcat服务(默认情况下)被限制在它可以读取和写入文件的位置。如果您打算使用替代的“临时”位置,您可能需要调整SELinux策略。

扶冠宇
2023-03-14

bin\catalina.bat的Tomcat安装目录中是这样的行:

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
:gotTmpdir

您可以设置环境变量CATALINA\u TMPDIR,也可以修改此文件

 类似资料:
  • 问题内容: 我使用mysql 5.7 我想将联接表的结果串联到单列中。我使用包裹在函数中的函数。这是查询 列包含来自联接表的数据。数据已正确检索,但问题是列未转换为正确的JSON。 如您所见,最后有点“切”。 我也尝试过,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗? 更新 问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一

  • 意识到递归是我的弱点之一后,我找到了一个网站,迫使你递归地解决简单问题(https://codestepbystep.com/problem/view/cpp/recursion/digitsSorted?problemsetid=15) 我坚持的一个(digitalsSorted,数字5)如下:调用一个传递数字作为参数的函数。如果该数字中的数字按递增顺序排序,则函数返回True,否则返回Fals

  • 我有一个表格和一个表格。包含所有课程的列表,包含教授/协助该课程的志愿者列表。 我想写一个查询,返回没有任何志愿者分配给它的所有课程的列表。这就是正在发生的事情: 以下所有查询都返回 course_id 3 course_id 4 course_id 5 为什么course_id 1(正确)被遗漏,而course_id 3却不是??? 同样的问题,但没有一个解决方案对我有效: 左侧外部连接轨4

  • 问题内容: 我有一个我以前从未见过的问题,猫鼬的findByIdAndUpdate没有在回调中返回正确的模型。 这是代码: 数据库中的原始文档如下所示: 进入的updateObj如下所示: 从回调返回的模型与原始模型相同,而不是updatedObj。如果我查询数据库,它已正确更新。它只是没有从数据库中返回。 这感觉像是一个“愚蠢的用户”错误,但我看不到它。任何想法表示赞赏。 问题答案: 在Mong

  • 给定一个类Foo 为什么我用Spock来嘲笑Foo 调用总是返回false? 不确定这是否有区别,但测试是在Groovy/Spock中进行的,而Foo是在Java8中进行的。