环境变量和系统属性通常具有一些限制,这意味着无法使用某些属性名称。为了解决这个问题,Spring Boot允许您将属性块编码为单个JSON结构。
当您的应用程序启动时,任何spring.application.json
或SPRING_APPLICATION_JSON
属性都会被解析并添加到Environment
中。
例如,在*NIX shell的命令行中提供的SPRING_APPLICATION_JSON
属性,可以作为环境变量使用:
$ SPRING_APPLICATION_JSON='{"acme":{"name":"test"}}' java -jar myapp.jar
在前面的示例中,Spring的 Environment
以acme.name=test
结尾。
相同的JSON也可以被当做系统属性提供:
$ java -Dspring.application.json='{"acme":{"name":"test"}}' -jar myapp.jar
或者,您可以使用命令行参数的形式来提供JSON:
$ java -jar myapp.jar --spring.application.json='{"acme":{"name":"test"}}'
如果要部署到经典的应用程序服务器(Application Server)上,则还可以使用名为java:comp/env/spring.application.json
的JNDI变量。
尽管来自JSON的
null
值将添加到生成的属性源中,但是PropertySourcesPropertyResolver
将值为null
的属性视为缺失值。这意味着JSON无法使用null
值覆盖低阶属性源中的属性。