我使用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。并且在计算每个文件的路径时使用自己的路径。因此必须仅重写属性,而不是变量。
最佳答案
(我认为)您想要做的是让 log.dir
变量在配置程序逐步浏览属性文件并遇到您的重写定义时更改值。
问题是,PropertyPlaceholderConfigurer
不能以这种方式工作;对于每个遇到的 ${placeholder}
定义,它仅检查获胜重新定义。它确实会考虑定义占位符的文件的上下文来解析占位符。
我只看到一种可行的解决方案:在每个文件中使用不同的变量名称。编写自己的占位符配置器的增益与工作负载比可能非常差。
关于Java、Spring 在属性文件中使用变量的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611796/