AFAIK,屬性文件將在第一次運行服務器時讀取。雖然有許多屬性只有一個關鍵字(唯一的)將被引用。
但是爲了適應這個要求,我認爲我們應該利用Java代碼。該代碼將負責根據請求(id)讀取特定的屬性文件。然後讀取屬性並將其設置爲可變的進一步使用:http://localhost:8081/prop?id=1或http://localhost:8081/prop?id=2得到不同的結果:
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>
執行它通過瀏覽器進行了測試。
我在啓動Mule服務器時發生異常,部署失敗,出現錯誤:'創建名爲'propertyFlow'的bean時出錯:bean初始化失敗;嵌套異常未能將類型'java.util.ArrayList'的屬性值轉換爲屬性'messageProcessors'所需的類型'java.util.List';無法將[test_project.ReadProperty]類型的值轉換爲屬性'messageProcessors [0]'所需的類型[org.mule.api.processor.MessageProcessor]:沒有找到匹配的編輯器或轉換策略'我將消息作爲返回值傳遞給此transformMessage方法。 – Arkade
我通過擴展AbstractMessageTransformer類來解決了問題。 – Arkade