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

发布于 2024-12-07 13:30:52 字数 684 浏览 0 评论 0原文

我使用 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。并且在计算每个文件的路径时使用自己的路径。因此,必须仅重写属性,而不是变量。

I use org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.
There are 3 properties files. So if properties duplicate - last wins.

The first file contains all properties, others substitute some properties.
I use e.g. variable like

log.dir=c:/log.

So I can substitute part of path in properties like

${log.dir}/app1.log

In first file I have 48 uses of this variable.

In second file I have 25 substitutes for properties from first file, and 5 substitutes in third file.

The problem that I need redefine this variable also in second and third file!

I would like use the same name

log.dir

But if I define it in second or third file - redefining go back to first file - but I need use for the rest 18 (48 -25 - 5=18) old properties.
What the best practices in similar cases?
Thanks.
After some analysis I would like have variable that has the same name in all properties files, but values must not be overridden. So for first file log.dir=c:\log, for the second log.dir=d:\log, for the third log.dir=e:\log. And when calculating paths for each file used own. So overridden must be only properties - not variables.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

远昼 2024-12-14 13:30:52

(我认为)您想要做的是让 log.dir 变量在配置程序逐步浏览属性文件并遇到您的重写定义时更改值。

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

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

What (I think) you'd like to do is to make the log.dir variable changing the value as the configurer steps through the property files and encounters your overriding definitions.

The problem is, the PropertyPlaceholderConfigurer does not work this way; for every encountered ${placeholder} definition it checks only the winning redefinition. It does resolve placeholders taking into account the context of the file they're defined in.

I see only one feasible solution: use a different variable name in each file. Writing your own placeholder configurator is probably very poor gain-to-workload ratio.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文