我不确定我是否充分理解 Spring 配置文件如何与 yaml 和属性文件一起使用。我试图混合这两种类型的配置(这两个文件不共享任何配置)但是我在从 yaml 配置中读取配置文件时遇到了问题。
我正在使用 Spring 4.1.1
这是代码。这是 context:property-placeholder 配置:
<context:property-placeholder location="classpath:/job-config.properties" order="1"
ignore-unresolvable="true" ignore-resource-not-found="false"/>
<context:property-placeholder properties-ref="yamlProperties" order="2"
ignore-resource-not-found="false" ignore-unresolvable="true"/>
其中 yamlProperties 是以下 bean
<bean id="yamlProperties"
class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
<property name="resources"
value="file:${catalina.home}/properties/test.yml"/>
</bean>
这是test.yml
spring:
profiles.default: default
---
spring:
profiles: default
db:
url: jdbc:oracle:thin:@##hostname##:##port##:##SID##
usr: ##USER##
pwd: ##PWD##
---
spring:
profiles: development
db:
url: jdbc:oracle:thin:@##hostname##:##port##:##SID_DEVELOPMENT##
usr: ##USER_DEVELOPMENT##
pwd: ##PWD_DEVELOPMENT##
我的问题是,当我尝试通过这样做来配置(通过 xml)我的数据源时:
<property name="url" value="${db.url}"/>
<property name="username" value="${db.usr}"/>
<property name="password" value="${db.pwd}"/>
Spring 总是使用 YAML 文件中的最后一个配置,而忽略配置文件。我试图通过 web.xml 中的 contex-parameter 或直接将活动配置文件传递给 JVM(我实现了一个实现 EnvironmentAware 接口的 bean 以获取活动/默认配置文件,并且它是正确的),这似乎一切都很好,但是,当试图注入配置文件的值被忽略。
我相信使用属性占位符上下文(带有订单)我得到一个属性占位符,它是 PropertySourcesPlaceholderConfigurer 的一个实例,因此可以访问 Environment 但我不明白为什么配置文件被忽略并且 spring 获取最后一个 yaml 文件配置。
提前致谢