spring-boot 属性占位符

Posted

技术标签:

【中文标题】spring-boot 属性占位符【英文标题】:spring-boot property placeholder 【发布时间】:2014-07-16 22:22:03 【问题描述】:

我无法弄清楚为什么我无法在 spring-boot 中将值注入到我的 application.properties 文件中。外部属性到 logging.file 变量中。我有一个如下所示的 application.properties 文件

logging.file=$mylogfile
server.port=$myport

对应的Spring-boot应用类

@PropertySources(
@PropertySource("file:///c:/myfolder/externalprops.properties"),
)

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application 

public static void main(String[] args) throws Exception 
    SpringApplication.run(Application.class, args);


和外部属性文件

mylogfile=myoutput.log
myport=8060

当我运行 spring-boot 1.0.2.REL 应用程序时,每次尝试将 mylogfile 注入 application.properties 中的 logging.file 属性时,都会收到以下异常

Exception in thread "main" java.lang.IllegalArgumentException: Could not resolve placeholder 'mylogfile' in string value "$mylogfile"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)

请注意,如果我自己注入服务器端口号,我在注入和启动应用程序时不会遇到任何问题。

我在这个问题上兜圈子,无法弄清楚我做错了什么。

【问题讨论】:

【参考方案1】:

我不认为您可以使用@PropertySource 将值注入“application.properties”——后者必须在读取或什至知道任何@Configuration 之前被解析并准备好使用。您的外部属性可以放在“$user.dir/application.properties”中,我认为这会实现您想要做的事情。

【讨论】:

我认为我一定做错了什么。让我感到困惑的是,我能够使用这种方法注入服务器端口。因此,我将头撞在墙上并尝试对 logging.file 做同样的事情的原因。不明白为什么注入端口工作但不注入日志文件 这是关于订单的。必须在创建 ApplicationContext 之前设置日志记录。如果您愿意,您可以从您的应用程序中重新初始化日志记录,并在日志记录开始后切换输出文件(我们认为最好默认执行一次)。

以上是关于spring-boot 属性占位符的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 无法解析字符串中的占位符

为啥 UITextview 没有 UITextField 之类的占位符属性 [重复]

如何测试浏览器是不是支持原生占位符属性?

更改占位符的 css 属性

如何在 .yml 文件中使用属性占位符

用 IE7 编辑占位符属性