【发布时间】:2017-08-01 00:38:33
【问题描述】:
我们需要一起加载多个属性文件并将它们用作属性的一个来源。 <util:properties> 允许您传递以逗号分隔的文件列表,到目前为止一切正常。所以,以下是好的:
<util:properties loaction="conf/file1.properties,conf/file2.properties,abc-*.properties" />
但是,在我们的例子中,属性文件列表不是固定的,它来自之前加载的另一个主属性文件。我们想将该列表作为参数传递给<util:properties>,但它不起作用。
<util:properties location="${allPropertiesFiles}" />
${allPropertiesFiles} 定义为
allPropertiesFiles=conf/file1.properties,conf/file2.properties,abc-*.properties
由于文件列表中的逗号而失败。它将它们视为一个文件名并抛出 FileNotFoundException。
我想知道 Spring 在什么时候尝试用逗号分割文件,看起来它发生在解析 ${allPropertiesFiles} 之前。例如,如果我按照以下方式进行操作,它可以正常工作,但这对我们来说不是一个实用的解决方案,因为我们不知道该列表中包含多少文件。
<util:properties location="${propFile.location1},${propFile.location2},${propFile.location3}" />
更新:
在解析${...} 中的属性值之前,使用',' 处理和拆分似乎是一个Spring 问题。我什至尝试使用 Spring EL 来拆分它,但它在解析有效 EL 时再次失败,因为它首先根据 ',' 破坏它,然后评估表达式。下面的示例因 EL 解析异常而失败:
<util:properties location="#{'${allPropertiesFiles}'.split(',')}" />
仅供参考,此观察结果适用于 Spring 4.2.x。非常感谢任何建议。
【问题讨论】:
标签: java spring config configuration-files properties-file