我在基于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文件中。
答案 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);