1

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

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

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

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

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

4

1 回答 1

0

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

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

在服务器启动/重启后它只会被读取一次

更新

假设您有一个名为 as 的属性文件,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;
            }
        }
于 2014-10-31T08:30:56.690 回答