You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot内嵌Tomcat启动报错:无法创建tempDir,java.io.tmpdir指向C:\Windows\

问题分析与解决方案

你遇到的这个错误核心原因很明确:Spring Boot内嵌的Tomcat在创建临时目录时,使用了系统级的java.io.tmpdir(即C:\Windows\),但普通用户对这个目录没有写入权限,所以抛出了Access is denied异常。虽然你的用户级TEMP变量指向C:/Users/me/AppData/Local/Temp,但JVM或Spring Boot启动时没有正确加载这个用户变量。

下面是几个可行的解决办法:

1. 手动指定JVM的临时目录参数

直接在启动应用时通过JVM参数强制指定java.io.tmpdir为你的用户临时目录:

  • 如果是在IDE(比如IntelliJ IDEA、Eclipse)中运行:
    在Run/Debug Configuration的VM options里添加:
    -Djava.io.tmpdir=C:/Users/me/AppData/Local/Temp
    
  • 如果是通过jar包运行:
    在启动命令中加入参数:
    java -Djava.io.tmpdir=C:/Users/me/AppData/Local/Temp -jar your-spring-boot-app.jar
    

2. 配置Tomcat专属临时目录

在Spring Boot的配置文件中直接指定Tomcat的基础目录,让它在你的用户临时目录下创建专属的临时文件夹,避免依赖系统tmpdir:

  • 如果你用application.properties:
    server.tomcat.basedir=C:/Users/me/AppData/Local/Temp/tomcat-temp
    
  • 如果你用application.yml:
    server:
      tomcat:
        basedir: C:/Users/me/AppData/Local/Temp/tomcat-temp
    

这个目录会自动创建,Tomcat的所有临时文件都会存在这里,权限问题自然解决。

3. 排查环境变量加载问题

虽然你说没修改过变量,但可以确认下JVM启动时是否真的读取到了用户级TEMP变量:
在应用中添加一段代码打印java.io.tmpdir的值:

System.out.println("Current java.io.tmpdir: " + System.getProperty("java.io.tmpdir"));

如果输出还是C:\Windows\,说明JVM启动时没有加载用户环境变量,这种情况下优先用前两种方法解决更直接。

内容的提问来源于stack exchange,提问作者ilya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:13:34