【发布时间】:2012-02-14 01:04:19
【问题描述】:
我正在开发一个包含多个独立模块的项目,每个模块都有自己的应用程序上下文属性文件。我希望能够加载所有这些属性,以便它们可以被 Spring 用于占位符解析。
以前的问题已经提到了这一点,并且有一篇很好的博客文章 here 描述了如何在每个上下文中使用 PropertyPlaceholderConfigurer,按优先级排序并将 ignoreUnresolveablePlaceholders 设置为 true 以便这些属性文件可以相互交叉引用,而无需炸了。
但是,这并不能解决我的问题,因为我还希望能够将我正在加载的属性用于一些自定义占位符解析(来自我正在解析的一些 yaml 文件)。这需要使用 PropertyPlaceholderHelper,它需要 Properties 对象作为参数。
据我所知,可能的解决方案是:
1) 将所有属性文件合并为一个属性 bean。然后可以使用它来创建 PropertyPlaceholderConfigurer(用于 Spring 的内部占位符解析)并与 PropertyPlaceholderHelper 一起使用(用于我自己的占位符解析)
2) 以某种方式配置 PropertyPlaceholderHelper 以使用 PropertyPlaceholderConfigurers 持有的一组属性及其层次结构,如果我继续遵循该博客文章的建议的话。
不幸的是,我不知道如何做这两个。任何帮助将不胜感激!
PS 看起来 Spring 3.1 将在这里提供很大帮助...不幸的是,我们还没有准备好迁移到它,所以我仍然需要一个解决方案来度过难关!
**** 编辑 ****
感谢到目前为止的回答。它们是很好的答案,但不幸的是对我没有帮助,因为(并且很抱歉之前没有提到这一点)我们目前正在将项目的核心模块与非核心模块分开。这意味着核心模块及其应用程序上下文不能硬编码属性文件的名称。令人沮丧的是,Spring 的类路径扫描似乎被破坏了,因此“classpath*:*.properties”类型的通配符仅在构建单个模块时有效,而不是顶级项目(我相信这是一个已知问题)。
那么问题是如何将非核心模块中定义的属性文件合并到核心模块中定义的现有属性文件中。目前我正在使用 BeanPostProcessor - 我只是想知道是否有更简单/更优雅的方法来做到这一点?
谢谢
【问题讨论】:
-
我认为你需要提供至少一个常量目录段,所以
classpath*:*.properties不起作用但classpath*:config/*.properties会。
标签: java spring properties