Java、Spring 在属性文件中使用变量的最佳实践

标签 java spring file ant properties

我使用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/

相关文章:

java - 使用星号的水平条形图

java - 为什么@PostConstruct 会导致NullPointerException?

java - Ionic with Tomcat - 成功登录,但没有注入(inject)主体

java - 如何通过jsp和spring security中的警报框获取当前登录角色

java - 在 Amazon S3 存储桶中创建 Avro 文件

java - jshell 命令 `/open` 可以相对于包含脚本的文件夹而不是工作目录工作吗?

java - Java 中的计数器(非 GUI)

java - 为什么它不会因堆栈溢出错误而终止?

c - 随机访问一个大的二进制文件

c++ - 从C++中的二进制文件中删除结构