Spring启动无法解析OS环境变量?

时间:2016-01-13 01:15:22

标签: spring spring-boot

我将Spring启动服务部署到AWS,而application.properties引用了一个OS环境变量,该变量被设置为部署过程的一部分。看起来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:”?

2 个答案:

答案 0 :(得分:2)

花了很多时间后,感觉就像在spring-boot中使用init脚本。我发现一些解决方法并不理想,但事情已经完成 -

init conf文件中的源环境变量。

  

source / etc / environment

这使得环境变量能够启动Spring启动应用程序的父进程。现在将所有环境变量作为JAVA_OPTS传递到conf文件

JAVA_OPTS =" -Denv.variable = $ {var.foo}"

答案 1 :(得分:0)

使用@ConfigurationProperties@Value注释在bean中注入OS var。

参考:Spring Boot documentation about Externalized Configuration

相关问题