【发布时间】:2025-11-29 19:10:02
【问题描述】:
我将 Spring Boot 服务部署到 AWS 并且 application.properties 引用了作为部署过程的一部分设置的操作系统环境变量之一。 Spring Boot 启动时似乎无法解析 OS 环境变量。
如果我回显变量,它似乎设置正确 -
ubuntu@ip-10-227-74-206:~$ echo $EC2_INSTANCE_ID
i-de8c136d
application.properties 文件引用该变量如下 -
service.hostId=aws-${EC2_INSTANCE_ID}
我在启动应用程序时看到以下错误 -
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private java.lang.String com.foo.services.registration.config; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'EC2_INSTANCE_ID' in string value "${EC2_INSTANCE_ID}"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
知道我做错了什么吗?在 application.properties 文件中引用时是否需要添加诸如“sys:”之类的前缀?
【问题讨论】:
-
你确定这个变量是全局可用的,而不仅仅是本地shell?
-
是的,变量是在 /etc/environment 文件中定义的,它是通过 /etc/bash.bashrc 获取的。登录主机而不是回显工作。可能是我完全错误的路径,但在论坛上的一些阅读表明 init 脚本可能没有使用交互式登录 shell。
标签: spring spring-boot