繁体   English   中英

Spring Boot无法解析OS环境变量?

[英]Spring boot not able to resolve OS environment variable?

我已将Spring Boot Service部署到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:”之类的任何前缀?

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

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

来源/ etc / environment

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

JAVA_OPTS = “ - Denv.variable = $ {} var.foo”

使用@ConfigurationProperties@Value批注将OS var注入到bean中。

参考: 有关外部化配置的Spring Boot文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM