Spring PropertyPlaceHolder Java Config外部属性文件

时间:2014-11-06 14:42:23

标签: java spring properties classpath spring-el

所以这必须是一些愚蠢的错误,我无法通过。我正在尝试外部化我的属性文件,该文件目前放在我的用户主目录中。我正在使用@PropertySource加载属性文件,如下所示:

@Configuration
@PropertySources(value = { @PropertySource("file:#{systemProperties['user.home']}/.invoice/config.properties") })
public class PropertiesConfig {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertiesPlaceHolderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }
}

但不幸的是,这不是加载属性文件。抛出FileNotFoundException。但是,如果我改变路径:

@PropertySources(value = { @PropertySource("file:/home/rohit/.invoice/config.properties") })

它运作正常。这就是早期路径解决的路径。我已经记录下来进行验证。所以在我看来,SpEL没有在@PropertySource注释中得到评估。它应该以那种方式工作吗?

如果是,那么还有其他方法可以读取位于/home/rohit的外部属性文件吗?出于显而易见的原因,我不想给出绝对的道路。我想避免延长PropertyPlaceHolderConfigurer课程。

我尝试的另一个选项是将/home/rohit/.invoice文件夹添加到tomcat类路径中。但似乎Spring不使用System Classpath来解析classpath:后缀。关于这个的任何指示?

1 个答案:

答案 0 :(得分:3)

@PropertySoure注释中EL表达式不起作用。您可以使用占位符${...},但这也仅限于系统或环境变量。但是,如果要解析用户的主目录,可以使用${user.home}占位符。

@PropertySource("file:${user.home}/.invoice/config.properties")

这应该按照要求工作。