Spring Boot Properties作为环境变量

时间:2018-03-27 16:02:18

标签: spring spring-boot spring-environment

我遇到过一些行为,这些行为似乎与spring boot处理应用程序属性文件与配置属性类中的环境变量的方式不一致。我不确定这是春天的错误还是我对“应该”发生的事情的理解错误。

我有

@Data
@ConfigurationProperties("foo")
@Validated
public class ClientProperties {

    @NotBlank
    private String apiKey;

    @NotBlank
    private String uri;

}

在我的application.properties文件中:

foo.baseUri=https://system.appspot.com
foo.uri=${foo.baseUri}/Valuation?apikey=${foo.apiKey}&bar={bar}

设置Just FOO_APIKEY

如果我运行我的应用程序:

export FOO_APIKEY=DEF

然后我得到

APPLICATION FAILED TO START
***************************

Description:

Binding to target class ClientProperties(apiKey=null, uri=https://system.appspot.com/Valuation?apikey=DEF&bar={bar}) failed:

    Property: foo.apiKey
    Value: null
    Reason: may not be empty

请注意,在URI中,api键按预期设置,基本URI

设置Just FOO_API_KEY

接下来,如果相反,我尝试只设置此属性(删除旧的env var):

export FOO_API_KEY=ABC

然后我的应用程序启动,但值不符合预期。我的日志显示:

API Key: ABC.
URI Property: ${foo.baseUri}/Insurance?apikey=${foo.apiKey}&bar={bar}.

请注意,现在基础uri也消失了,而API密钥也丢失了。

设置属性FOO_API_KEY和FOO_APIKEY

当我设置两个环境变量时,应用程序启动但apiKey属性ClientProperties保存FOO_APIKEY导出的值,其中uri属性为{{ 1}}保存ClientProperties导出的值。

FOO_API_KEY

注释

我实际上不需要API KEY IS: ABC. URI IS: https://system.appspot.com/Insurance?apikey=DEF&bar={bar}. 的值。它仅在ClientProperties.apiKey中通过ClientProperties.uri中已经解决的application.properties中使用过。但是,我指定了属性,以便我可以进行验证以确保设置值。我可以从我的课程中删除该值,一切都会好的 - 期待我失去我的验证。

Spring启动版本为:1.5.10.RELEASE

0 个答案:

没有答案
相关问题