在运行时将java.util.Properties对象的属性设置为mule flow属性占位符

时间:2016-06-29 22:01:19

标签: spring properties mule

我成功地在app init从数据库加载mule app属性并将它们设置为mule流的属性占位符。这里引用的代码Read mule props from the DB

但是,这仅适用于应用启动期间。我希望能够修改数据库中的属性(我可以)并使其在运行时反映出mule流,而无需重新启动mule服务器。

为了实现这一点,我使用Http Listener创建了一个新流,它调用一个java类,该类从数据库中读取属性并尝试使用PropertySourcesPlaceHolderConfigurer类将其设置为bean工厂。 java类的示例代码如下所示。

visible-xs

此代码成功运行但未能在运行时将属性设置为mule应用程序流。

有谁知道如何才能实现这一目标?

请帮忙

1 个答案:

答案 0 :(得分:1)

我相信一旦应用程序完全启动,PropertyPlaceholders生命就会结束,即它们仅限于应用程序init和仅在bean创建期间。如果您希望能够在运行时更改属性,则不应使用属性占位符,而应使用其他属性机制,如创建org.springframework.beans.factory.config.PropertiesFactoryBean的bean

<?xml version="1.0" encoding="UTF-8"?>
<mule  xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:json="http://www.mulesoft.org/schema/mule/json" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mulesoft.org/schema/mule/json http://www.mulesoft.org/schema/mule/json/current/mule-json.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd">

    <http:listener-config doc:name="HTTP Listener Configuration" host="0.0.0.0" name="HTTP_Listener_Configuration" port="8081"/>
    <spring:beans>
        <spring:bean id="myProps" name="myProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <spring:property name="properties">
                <bean factory-bean="databasePropertiesProvider" factory-method="getProperties" />       
            </spring:property>
        </spring:bean>
    </spring:beans>
    <flow name="test">
        <http:listener config-ref="HTTP_Listener_Configuration" doc:name="Recieve HTTP request" path="/test"/>
        <logger message="#[app.registry.myProps['testPropertyName']]" />
    </flow>
</mule>

您可以使用从db加载而不是从文件读取。然后在你的mule配置中使用这些作为#[app.registry.myPropes [&#39; mykey&#39;]]。阅读MEL上下文对象here

在上面的示例代码中,我在数据库中注册了myPoros bean和加载的属性。 app.registry是mule中可用的应用程序注册表上下文对象,它使您可以访问spring bean。