【问题标题】:Java, Spring best practices to use variables in properties filesJava、Spring 在属性文件中使用变量的最佳实践
【发布时间】:2011-11-28 12:49:27
【问题描述】:

我使用 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。 有 3 个属性文件。因此,如果属性重复 - 最后获胜。

第一个文件包含所有属性,其他文件替换一些属性。 我使用例如像

这样的变量
log.dir=c:/log.

所以我可以用

之类的属性替换部分路径
${log.dir}/app1.log

在第一个文件中,我有 48 次使用这个变量。

在第二个文件中,第一个文件中的属性有 25 个替代项,第三个文件中有 5 个替代项。

我需要在第二个和第三个文件中重新定义这个变量的问题!

我想用同一个名字

log.dir

但如果我在第二个或第三个文件中定义它 - 重新定义返回到第一个文件 - 但我需要使用其余 18 个(48 -25 - 5=18)个旧属性。 类似案例中的最佳实践是什么? 谢谢。 经过一些分析,我希望在所有属性文件中都有具有相同名称的变量,但不能覆盖值。所以对于第一个文件 log.dir=c:\log,对于第二个 log.dir=d:\log,对于第三个 log.dir=e:\log。并且在计算自己使用的每个文件的路径时。所以被覆盖的只能是属性 - 而不是变量。

【问题讨论】:

  • 我什至不确定你说的是什么。在任何情况下,您可能都想考虑编写一个自定义的占位符配置器,尽管这听起来像是在滥用这个想法。

标签: java spring file ant properties


【解决方案1】:

(我认为)您想做的是让 log.dir 变量在配置器逐步遍历属性文件并遇到您的覆盖定义时更改值。

问题是,PropertyPlaceholderConfigurer 不能这样工作;对于每个遇到的${placeholder} 定义,它只检查获胜重新定义。它确实会根据定义占位符的文件的上下文来解析占位符。

我只看到一个可行的解决方案:在每个文件中使用不同的变量名。编写自己的占位符配置器的增益与工作负载比可能很差。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多