我成功地在app init从数据库加载mule app属性并将它们设置为mule流的属性占位符。这里引用的代码Read mule props from the DB
但是,这仅适用于应用启动期间。我希望能够修改数据库中的属性(我可以)并使其在运行时反映出mule流,而无需重新启动mule服务器。
为了实现这一点,我使用Http Listener创建了一个新流,它调用一个java类,该类从数据库中读取属性并尝试使用PropertySourcesPlaceHolderConfigurer类将其设置为bean工厂。 java类的示例代码如下所示。
visible-xs
此代码成功运行但未能在运行时将属性设置为mule应用程序流。
有谁知道如何才能实现这一目标?
请帮忙
答案 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。