Spring Boot Gradle项目打jar包后无法读取resources下sensitive.properties文件
Spring Boot Jar包无法读取sensitive.properties解决方案
根因分析
你当前的写法不兼容Jar包运行场景:
Spring Boot 可执行Jar采用嵌套压缩结构,classpath下的资源文件会被打包到BOOT-INF/classes/路径下,属于Jar包内部的压缩条目,不存在文件系统层面的独立物理路径。IDE运行时资源直接存放在本地目录,所以调用resource.getURI().getPath()可以拿到有效路径,Jar包运行时该路径为Jar内部虚拟路径,无法通过文件系统直接读取。
解决方案
方案1:直接通过输入流读取资源(推荐)
不需要获取资源的本地路径,直接通过Resource提供的输入流加载配置:
public void getConfigValue(String configKey) { Resource resource = new ClassPathResource("sensitive.properties"); Properties properties = new Properties(); try (InputStream inputStream = resource.getInputStream()) { properties.load(inputStream); String value = properties.getProperty(configKey); // 后续业务逻辑 } catch (IOException e) { e.printStackTrace(); } }
Spring 项目也可以直接通过注解注入配置值,无需手动读取文件:
// 直接注入配置,Spring会自动处理classpath资源加载 @Value("${你的配置项键名}") private String sensitiveConfig;
方案2:检查Gradle打包配置,确认资源未被遗漏
如果修改读取逻辑后仍找不到文件,确认资源是否被正确打进Jar包:
- 检查
build.gradle配置是否排除了properties文件,正确的资源配置参考:
sourceSets { main { resources { srcDirs = ["src/main/resources"] // 确保包含properties文件,没有单独排除sensitive.properties includes = ["**/*.properties", "**/*.yml", "**/*.yaml"] } } }
- 打包完成后解压Jar包,检查
BOOT-INF/classes/目录下是否存在sensitive.properties,不存在则说明打包环节遗漏了该文件。
内容的提问来源于stack exchange,提问作者Girish
相关产品推荐
相关产品推荐

