我正在修改在应用程序上下文文件中使用Spring PropertyPlaceholderConfigurer的代码。在应用程序中成功读取和使用这些属性。但是,如果我使用<import resource="classpath:/my/class/path/${my.file.name}" />
跟随PropertyPlaceholderConfigurer声明,则会引发“Could not resolve placeholder 'my.file.name'
”错误并引发一系列异常。在声明PropertyPlaceholderConfigurer后,属性是否立即可用?如果没有,它们何时可用?
答案 0 :(得分:5)
在PropertyPlaceHolderConfigurer(BeanFactoryPostProcessor)解析属性占位符之前解析导入资源。您必须将已解析的资源名称放入导入中。
由于PropertyPlaceHolderConfigurer是BeanFactoryPostProcessor,因此在从Spring配置文件加载bean定义后调用它。
答案 1 :(得分:3)
在弹簧上下文文件上进行了多次传递,因此问题是可用属性的传递。不幸的是,<import>
标签在早期的传递上处理而不是bean声明(例如你的PropertyPlaceholderConfigurer
),因此它不会以你尝试使用它的方式提供。 / p>
您(可能)尝试做的事情在Spring中很常见,有许多不同的解决方案。它们通常涉及修改构建以进行注射。谷歌搜索/堆栈溢出为每个环境弹簧配置应该出现一些东西。我读过Spring 3.1将提供一个允许每个环境配置的工具(所以如果我正在进行“测试”构建,请使用“this”属性文件,如果我正在进行“dev”构建,请使用此文件。) ,但此时我对此知之甚少。