在Mule流的运行时动态检索属性值

时间:2016-07-20 07:30:57

标签: mule mule-studio properties-file anypoint-studio

我有一个要求,因为id将通过HTTP请求传递,并且根据该ID,我需要动态调用属性值。

对于一个ID我需要属性 dgc.metamodel.CommunityToSync=Community1 dgc.metamodel.DomainToSync=Domain1

我需要另一个ID dgc.metamodel.CommunityToSync=Community2 dgc.metamodel.DomainToSync=Domain2

是否可以在Mule中执行此操作?

3 个答案:

答案 0 :(得分:0)

AFAIK,将在首次运行服务器时读取属性文件。虽然有许多属性只有一个键(唯一)将被引用。

但是为了满足这个要求,我认为我们应该使用Java代码。此代码将负责根据请求(id)读取特定属性文件。然后读取属性并将其设置为变量以供进一步使用:

private Properties prop = new Properties();
private InputStream input = null;

public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {    
    String id = ((ParameterMap)message.getInboundProperty("http.query.params")).get("id");
    input = getClass().getResourceAsStream("../property" + id + ".properties");
    prop.load(input);

    message.setInvocationProperty("communityToSync", prop.getProperty("dgc.metamodel.CommunityToSync"));
    message.setInvocationProperty("domainToSync", prop.getProperty("dgc.metamodel.DomainToSync"));

我用简单的流程测试了它

<flow name="propertyFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/prop" allowedMethods="GET" doc:name="HTTP"/>
    <custom-transformer class="example.ReadProperty" doc:name="Java"/>
    <logger message="CommunityToSync = #[flowVars.communityToSync], DomainToSync = #[flowVars.domainToSync]" level="INFO" doc:name="Logger"/>
</flow>

通过浏览器执行:http://localhost:8081/prop?id=1http://localhost:8081/prop?id=2以获得不同的结果。

答案 1 :(得分:0)

您可以通过首先将属性读入Map来实现此目的:

您可以使用Spring将它们直接加载到地图中:

<spring:beans>
        <spring:bean id="appProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
            <spring:property name="singleton" value="true"/>
            <spring:property name="location" value="classpath:application.properties"/>
        </spring:bean>
    </spring:beans>

使用MEL类似于:

在您的流程中动态访问它
 <logger message="My prop #[app.registry.appProps[flowVars.someKey]]" level="INFO" />

您可以根据需要构建密钥字符串。

答案 2 :(得分:0)

你可以用groovy来检查你的要求并根据需要发送属性。