【问题标题】:How to read property file at the time of flow start in Mule如何在 Mule 中启动流程时读取属性文件
【发布时间】:2014-12-26 23:40:57
【问题描述】:

我正在创建一个主要包含 2 个节点的流: 1) WMB 节点 - 它从 MQ 中选择消息 2) Java Node - 它转换和处理消息。

我创建了一个属性文件,其中包含一些用于实现业务逻辑的值。在流程执行期间,我的 java 类读取该属性文件。

因此,根据当前的实现,每当 MQ 中出现新消息时,java 类都会加载属性文件。因此,这样,如果有 'n' 条消息进入队列,流程会读取属性文件 'n' 次。

但我希望属性文件应该只读取一次,在我们部署/重新启动流程时而不是在流程的每次执行中。

仅供参考,我没有在我的项目中使用 spring 框架。

【问题讨论】:

    标签: mule mule-studio mule-component


    【解决方案1】:

    您可以在 Mule 流程中声明以下内容,并且您不需要 Spring bean:-

     <context:property-placeholder location="classpath:yourpropertFileName.properties"/>
    

    服务器启动/重启后只读一次

    更新

    假设您有一个名为 yourpropertFileName.properties 的属性文件,并且您在其中定义了以下键和值:-

    message1=This is message1 value
    message2=This is message2 value
    

    现在您可以在 Mule Flow 中使用它,如下所示:-

    <logger message="${message1}" level="INFO" />
    <logger message="${message2}" level="INFO" />
    

    如您所见,我已经从属性文件中读取了键和值,并在 Mule 配置文件的记录器中使用了它。同样,您可以在任何您想要的 Mule 组件中使用属性文件中的键

    更新:- 这是一个从属性文件中读取值的示例 Java 类。您可以根据需要进行修改:-

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    import org.mule.api.MuleMessage;
    import org.mule.api.transformer.TransformerException;
    import org.mule.transformer.AbstractMessageTransformer;
    
        public class SampleJavaClass extends AbstractMessageTransformer {
    
            Properties prop = new Properties(); //Creating property file object read File attachment path from property file
            InputStream input = null; // To read property file path
    
            @Override
            public Object transformMessage(MuleMessage message, String outputEncoding)
                    throws TransformerException {
    
                 try {
                    input = getClass().getResourceAsStream("yourpropertFileName.properties"); // Property file path in classpath
                     prop.load(input); // get and load the property file
                    String msg1=prop.getProperty("message1");
                    String msg2=prop.getProperty("message2");
                    System.out.println("Key1 from Prop file "+msg1);
                    System.out.println("Key2 from Prop file "+msg2);
                } catch (IOException e)
                {
    
                    e.printStackTrace();
                }
    
                  return message;
                }
            }
    

    【讨论】:

    • 澄清一下,Mule 内部使用了 Spring 框架。使用Spring加载Mule配置文件,可以直接添加上下文命名空间。
    • @Anirban:感谢您的回复。如何在我的 Java 代码中使用此属性文件的密钥。请帮忙。
    • 我已经更新了我的答案。如果你觉得有用,请接受答案
    • @Anirban:感谢您在此主题上的快速周转和帮助。这样我可以在流程中使用属性文件,例如在文件节点中配置超时,在 WMQ 节点中配置队列名称。但在这里我的问题是如何在 Java 程序中使用属性文件值(我已经在 J​​ava 节点中编写),因为我的属性文件有很多键,我想在运行时使用它们。我不能在流 XML 中给出所有这些。请帮帮我。
    • 请检查我的答案 .. 使用访问属性文件值的示例 Java 类更新 .. 如果您觉得这有帮助,请接受我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多