Spring Boot 1.5.22迁移至2.0.0后server.tomcat.baseDir配置失效
Spring Boot 迁移至2.0.0后嵌入式Tomcat临时目录配置失效问题及解决
问题场景
将Spring Boot从1.5.22版本迁移到2.0.0版本后,遇到嵌入式Tomcat生成临时目录的配置不生效问题:
原有配置
主配置文件application.properties:
basePath=/info/components server.tomcat.baseDir=${basePath}/apps/service
开发环境配置文件application.properties:
basePath=classpath:
自定义初始化逻辑
有一个继承自PathInit的初始化类BasePathOverride,会在应用启动前根据运行环境覆盖basePath的值,核心代码如下:
public class BasePathOverride extends PathInit { @Override public void run(ApplicationContext context) throws InitException { String basePath = context.getEnvironment().getProperty("basePath"); if (/* 检查basePath是否为空 */) { String path = getAbsolutePath(basePath); // 返回绝对路径(如"/home/user/...") // 检查新路径是否正确/存在 System.setProperty("basePath", path); } else { // 其他逻辑 } } }
问题现象
在Spring Boot 1.5.22版本中,上述逻辑可以正常生效,Tomcat的baseDir会使用覆盖后的basePath路径;但升级到2.0.0版本后,即使通过System.setProperty覆盖了basePath,Tomcat的baseDir仍然指向默认的/info/components路径。
解决方法
将Spring Boot版本从2.0.0.RELEASE升级至2.0.9.RELEASE后,该问题得到解决,Tomcat的baseDir可以正确使用覆盖后的basePath路径。
内容的提问来源于stack exchange,提问作者Andrei Țocu
相关产品推荐
相关产品推荐

