Spring Boot如何在application.yml中读取外部文件的明文配置值
Spring Boot application.yml读取外部文件内容的解决方案
Spring Boot 原生配置解析器默认不支持
FILE()自定义函数解析,file:前缀仅用于标识配置文件本身的资源路径,无法直接读取单个文件的文本内容作为属性值。
方案1:使用SpEL表达式直接读取(无需额外依赖/调整结构)
直接在application.yml中通过SpEL表达式调用JDK原生文件API读取内容,示例配置如下:
spring: datasource: # 读取文件内容并自动去除首尾空格、换行符 password: '#{new String(java.nio.file.Files.readAllBytes(java.nio.file.Paths.get("/tmp/pass"))).trim()}'
注意事项:
- 确保应用运行进程对
/tmp/pass文件有可读权限 trim()方法可根据实际密码是否需要保留首尾空白调整
方案2:使用Config Tree 原生特性(Spring Boot 2.4+ 推荐)
该方案是Spring Boot官方推荐的读取挂载密钥/配置文件的方式,适合多配置文件的场景:
- 把密码文件移动到单独的空目录下,例如
/tmp/secrets/pass(目录下的文件名会作为配置key,文件内容作为配置value) - 调整application.yml配置如下:
spring: config: # 导入configtree目录下的所有文件作为配置源,optional前缀代表目录不存在时也不会启动报错 import: optional:configtree:/tmp/secrets/ datasource: # 直接使用文件名作为配置key取值 password: ${pass}
注意事项:无需额外引入依赖,Spring Boot 2.4及以上版本原生支持该特性。
内容的提问来源于stack exchange,提问作者Bhuvan
相关产品推荐
相关产品推荐

