为什么当我运行项目时它无法从属性文件中读取属性?

时间:2015-10-07 16:03:17

标签: java spring mule

我在基于mule的项目中有service.properties和service-properties.xml。我如何定义service.properties应该在service-properties.xml之前加载。 因为我在service-properties.xml中使用service.properties的属性。 因为我在service-properties.xml文件中有这个代码:

    <context:property-placeholder
        location="classpath:mule/service.properties"
        properties-ref="propertiesHolder" />
    <context:annotation-config />   
   <spring:bean id="propertiesHolder"
        class="MyClass">
        <spring:property name="dataSource" ref="dataSource" />
    </spring:bean>
    <spring:bean id="dataSource"        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

       <spring:property name="driverClassName value="${db.driverClassName}" />
        <spring:property name="url" value="${db.url}" />
        <spring:property name="username" value="${db.username}" />
        <spring:property name="password" value="${db.password}" />
    </spring:bean>

我的项目是成功构建的,但是当我运行项目时,它无法从service.properties解析db.driverClassName,db.url,...和db.password,但我将它们放在service.properties文件中。

3 个答案:

答案 0 :(得分:0)

如果你使用context:property-placeholder在同一个上下文中加载属性文件和配置文件,那么Mule / Spring会为你带来这个并且没有问题:

https://docs.mulesoft.com/mule-user-guide/v/3.7/configuring-properties

答案 1 :(得分:0)

我认为您的应用无法解析属性,因为您在location配置中包含 properties-ref属性和property-placeholder属性。 properties-ref属性旨在替换location属性,以便从java.util.Properties对象提供属性值。

试试这个:

<context:property-placeholder location="classpath:mule/conversion/service.properties" />

然后,您可以简单地引用dataSource bean中的属性。

没有使用属性(dataSource)连接bean的显式引用和加载属性的bean的原因是<context:property-placeholder />元素定义了BeanFactoryPostProcessor。这是一种特殊的bean,可以在实例化之前修改其他bean的定义。它使用${propertyName}语法搜索bean属性,并在Spring尝试实例化它们之前替换它们。

更新:如何从数据库加载属性,由属性

配置

如果您的目标是从数据库加载配置属性,并使用其他属性文件配置与该数据库的连接,请查看this StackOverflow question

答案 2 :(得分:0)

我可以通过以下配置从文件和数据库中读取属性:

sqlQuery.addScalar("count", StandardBasicTypes.DOUBLE);