【发布时间】:2017-05-05 21:03:14
【问题描述】:
我们使用的是 Spring Boot 1.3.5,它使用 @PropertySource("file:C:/tmp/application.properties") 加载外部 application.properties。这是application.properties 的样子:
env=prod
instance=EAST
emailSubject=${env}-${instance}: An error occurred
代码能够查看/获取env 和instance 变量的正确值,但emailSubject 变量没有被替换。而当我们在代码中打印出来的时候,会显示
"${env}-${instance}: An error occurred"
如何让emailSubject被正确替换为显示
"prod-EAST: An error occurred"
【问题讨论】:
-
您确定没有任何其他配置(Spring 或 Maven/Gradle)可能会干扰此操作吗?据我所知,这应该有效。还有,如何在代码中打印出来?
-
嗨@thomas-kåsene,很抱歉回复晚了。 1. 项目中没有其他 .properties 文件 2. 我们使用的是 maven,所以我们确实有 pom.xml,但因此我不知道哪个库/属性可能会干扰这个? 3. 我们确实有 Spring Batch 使用的配置 xml - 配置作业和另一个简单定义 bean 的配置 xml - 但似乎没有与配置相关的属性
-
对于打印,我们只是使用我们的配置类读取属性并在应用程序启动时打印它们(使用记录器)。所有简单的属性,如 env、instance 都被正确打印。但是 emailSubject 是不做替换的。
-
是否可以提供一个实际的代码示例来尝试打印相关属性?
-
@ThomasKåsene 谢谢!!问题是即使它是一个 Spring 项目,编写代码的同事以旧的 java 方式加载属性(在静态块中使用 java.util.properties),因为他想在其他一些事情之前加载这些属性,这春季没有发生(或者我们的团队无法做到)。您的提示解决了这个问题,因为 java.util.Properties 只是一个读取键/值分离的简单文件,如果不编写一些自定义调整就无法实现。我将不得不在代码中处理它。请发表您的答案,以便我接受!
标签: java spring spring-boot properties