【发布时间】:2015-08-15 13:40:26
【问题描述】:
我的应用程序正在尝试将所有项目属性外部化,其中一些将在我的应用程序中,而另一些将在 Windows 的某个文件夹中。
我设置 Spring 以这种方式执行:--spring.config.location=file:///C:\Temp\config\application.properties,classpath:application.properties
如您所见,如果双方存在相同的属性,应用程序属性将被保留(优先顺序)。例如,我注意到如果存在于文件夹 (file://) 之外,可以找到一些属性,例如“server.port”,但如果我创建一个这样的“common.acronym-name”,我的项目将找不到它的值。
为什么“server.port”的行为与我创建的不同?是否有任何配置需要告诉 Spring Boot 在我的项目中查看这个外部属性?
@Value("${common.acronym-name:}") //Just find it in application classpath
private String acronymEnv;
谢谢!
【问题讨论】:
-
我无法重现这一点,一切似乎都符合预期。类路径属性文件中的值覆盖外部文件属性,如果不存在要覆盖的值,则使用外部值。
common.acronym-name的行为与server,port的行为相同。您的设置中一定有一些您没有显示的内容对您所看到的内容负责。也许创建一个mcve -
我注意到属性的顺序对外部文件有影响,对 Spring Boot 有什么要求吗?我注意到如果我的类路径中只有一个 application.prop ,则顺序不会影响。
-
不,我也无法重现。
-
请尝试创建一个类来获取“spring.main.show-banner”属性值,如下面的示例。
-
我注意到 Spring Boot 无法正确读取外部属性,如果我尝试仅读取外部属性,横幅仍会显示在顶部。 java -jar sample-1.2.3.RELEASE.jar -Dspring.config.location=file:///C:\Temp\config\application.properties
标签: spring web spring-boot