簡體   English   中英

System.getProperty(“java.io.tmpdir”)沒有返回正確的位置

[英]System.getProperty(“java.io.tmpdir”) not returning correct location

我已閱讀這篇文章,並確保將我的系統變量和用戶變量的 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 window 中set -Djava.io.tmpdir=C:\Temp並且仍然得到相同的結果。

在 Tomcat 安裝目錄下的bin\catalina.bat中有以下幾行:

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

您可以設置環境變量CATALINA_TMPDIR或修改此文件。

“我也嘗試過從 cmd window 中設置 -Djava.io.tmpdir=C:\Temp 並且仍然得到相同的結果。”

Tomcat 本身正在將System屬性中的java.io.tmpdir屬性設置為任何CATALINA_TMPDIR環境變量設置為。 這發生在 Tomcat 啟動期間,它會覆蓋您的-D設置。

因此,簡單的解決方案是(如本答案所述)在啟動 Tomcat 的環境設置CATALINA_TMPDIR修改catalina.bat文件(或 Linux 上的catalina.sh文件)。 前者會更好。 如果可以的話,最好保持 Tomcat 安裝樹“原始”。

On the other hand, if you want your webapp to use (say) "C:\Temp" for certain things, while still having the rest of the web container use the java.io.tmpdir for the rest, your webapp code can use (例如)

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

代替

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

即在您創建臨時文件時告訴它要使用哪個臨時目錄。 (如果臨時文件是在第 3 方代碼中創建的,那可能會很尷尬。)


最后要注意的一件事是,如果您在啟用了強制執行的 SELinux 系統上運行 Tomcat,則 Tomcat 服務(默認情況下)受限於它可以讀取和寫入文件的位置。 如果您打算使用替代的“臨時”位置,您可能需要調整 SELinux 策略內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM