7

我正在使用带有弹簧配置文件的 spring 3.1 来加载 bean。在我的应用上下文文件中,我加载如下属性:

<context:property-placeholder order="1"  location="classpath*:META-INF/spring/*_${spring.profiles.active}.properties" ignore-unresolvable="true"/>

然后我使用属性值来加载数据源bean,如

<property name="driverClassName" value="${database.driverClassName}"/>

它工作正常。当我添加更多属性占位符以便可以加载某些数据库表中的属性时,问题就开始了。

这使用由加载的属性引用

<bean id="configFactoryBean"
class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
   <constructor-arg ref="globalSystemConfiguration"/>
</bean>

要添加详细信息,它configFactoryBean使用datasource从数据库加载属性。

当我这样做时,我有以下异常:

java.lang.ClassNotFoundException: ${database.driverClassName}

我的分析是它试图在datasource从第一个上下文属性占位符解析属性之前加载。我可能错了。或者,弹簧轮廓变量可能没有正确解析。

谁能帮我解决这个问题。

谢谢阿奇

4

4 回答 4

11

这个关于多个属性占位符的错误可能与您的问题有关:https ://jira.spring.io/browse/SPR-9989

当使用multiplePropertyPlaceholderConfigurer@Value注解和占位符语法(即 ${key:defaultValue})的默认值结合使用时,仅使用第一个PropertyPlaceholderConfigurer。如果此配置器不包含所需的值,@Value即使第二个 PropertyPlaceholderConfigurer包含该值,它也会回退到默认值。

影响版本/秒:3.1.3

于 2014-03-17T11:21:16.140 回答
4

在我的应用程序中,我以下列方式使用属性占位符配置器,它运行良好。你可以试试。

<bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
          <property name="locations">
            <list>
                <value>classpath*:META-INF/spring/*_${spring.profiles.active}.properties</value>
            </list>
          </property>
    </bean>

我认为这应该可以解决您的问题。:)

于 2013-06-03T13:00:51.543 回答
4

每个<context:property-placeholder> 创建一个新的 PropertyPlaceholderConfigurer 实例——它很容易变得混乱。您应该在每个应用程序和应用程序级别上拥有一个这样的东西,而不是在库的那个上 - 这使得维护变得更加容易。

有关更多详细信息和如何处理它的建议,请看这里: http ://rostislav-matl.blogspot.cz/2013/06/resolving-properties-with-spring.html

于 2013-06-03T13:25:07.377 回答
1

由于您建议硬编码配置文件的路径有效,请尝试使用标签上的配置文件属性来选择性地包含配置。

<beans profile="profileName">
    <context:property-placeholder  order="1"  location="classpath*:META-INF/spring/hardcoded.properties" ignore-unresolvable="true"/>
</beans>

<beans profile="profileName2">    
    <context:property-placeholder order="1"  location="classpath*:META-INF/spring/hardcoded.properties" ignore-unresolvable="true"/>
</beans>

请参阅这篇解释配置文件的文章:http: //java.dzone.com/articles/using-spring-profiles-xml

于 2013-06-03T09:12:10.437 回答