我使用嵌入式tomcat的Spring Boot,一切正常,突然间我收到了错误:
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to create tempDir. java.io.tmpdir is set to C:\Windows\
at org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory.createTempDir(AbstractEmbeddedServletContainerFactory.java:183)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:165)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134)
... 11 common frames omitted
Caused by: java.io.IOException: Access is denied
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:2024)
at java.io.File.createTempFile(File.java:2070)
at org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory.createTempDir(AbstractEmbeddedServletContainerFactory.java:174)
... 14 common frames omitted
我没有对用户或系统变量进行任何操作。
我的TEMP 用户变量正在查看C:/ Users / me / AppData / Local / Temp,我猜tomcat必须使用系统一的这个值,实际上是C:/ Windows / Temp
答案 0 :(得分:12)
如果使用IDEA,请在“运行/调试配置”的“环境变量”窗口中选中“包括父级环境变量”。
答案 1 :(得分:2)
我观察到以下行为
作为一种快速的解决方法,我在运行配置中明确添加了-Djava.io.tmpdir=$EXISING_DIR_WITH_WRITE_ACCESS
作为JVM参数。
答案 2 :(得分:0)
就我而言,将默认工作空间库从[jre.1.8.0_121]更改为[jdk.1.8.0_121]时出现了问题。将其重新设置为jre似乎已解决了该问题。
答案 3 :(得分:0)
如果使用eclipse,请在“运行/调试配置”的“环境变量”窗口中选中“附加到环境变量”。
感谢上面的@max答案
我正在使用JAVA EE蚀-光子
答案 4 :(得分:0)
在Windows上,GetTempPathA用于定位临时目录。算法:
1. The path specified by the TMP environment variable.
2. The path specified by the TEMP environment variable.
3. The path specified by the USERPROFILE environment variable.
4. The Windows directory.
因此,如果您的应用程序启动时未定义TMP
和TEMP
和USERPROFILE
,则会得到java.io.tmpdir
== GetWindowsDirectoryA。
通常,应用程序在java.io.tmpdir
(通过app-run.bat
)或-D...=...
内设置app.properties
。
我遇到了这个问题,因为如果Test
属性没有传递而是被替换,那么Gradle environment
任务将不会传递环境变量:
test {
environment = ["A": "1", "B": "2"] // won't work, because it replaces envs
}
test {
environment( ["A": "1", "B": "2"] ) // will work, because it appends to existing envs
}