我有一个多模块maven项目,每个模块都是一个jar,它有自己的上下文文件和一组捆绑在JAR中的默认属性。
基本上在核心模块中我有这个:
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:core.properties</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
现在我有另一个模块,通过加载所有相关的XML并添加自己的配置文件来构建应用程序
<import resource="classpath*:core-context.xml" />
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:application.properties</value>
<value>#{systemEnvironment['foo_bar']}</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
除了具有默认值的配置文件之外,我的所有配置文件都正常工作。我无法在application.properties或系统变量指向的文件中覆盖它们。
我尝试使用spring.config.location
强制配置文件。我确实在tomcat中看到消息说我有配置-Dspring.config.file=file:///...
(windows路径)。但是春天完全无视它(Spring的日志中没有消息)。
我尝试切换到PropertySources类而没有更多成功。
我非常希望不必删除所有默认属性并将所有内容放在外部文件中,因为很多参数都是应用程序的内部参数,并且对客户端没有任何价值。
那么我在这里缺少什么?
答案 0 :(得分:0)
好吧,我在几个小时之后发现了这么简单的事情。 这是诀窍:在导入之前声明属性占位符。
当你在一个属性占位符中声明文件时,它是最后一次获胜,看起来恰恰相反:第一名持有者获胜。
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:application.properties</value>
<value>#{systemEnvironment['foo_bar']}</value>
</list>
</property>
<property name="ignoreUnresolvablePlaceholders" value="true" />
</bean>
<import resource="classpath*:core-context.xml" />