在使用Mule ESB定義流程時,有時會使用自定義的Java Component,例如:spring
<flow name="testFlow"> <xx:inbound-endpoint doc name="xxx" /> <component class="xxx.xxx" doc:name="Java Component"> </component> </flow>
默認狀況下Mule引用自定義Component時,是request方式,即從inbound endpoint每推送一個Mule Message到Component節點時,建立一個Component instance去處理這條Message,處理完後instance被銷燬。code
正常狀況下,request方式能夠知足通常要求,可是若是Component中存在用於統計數據(例如處理時間,處理條數)等的屬性時,每次新建一個instance都會重置這些屬性,致使全部Mule Message處理完後沒法統計這些數據。component
針對這個問題,咱們有如下兩種解決方法:xml
1)將這些統計數據的屬性設置爲static。class
2)將Java Component實例引用方式改成singleton方式。test
第二種方法有兩種設置方式:object
<flow name="testFlow"> <xx:inbound-endpoint doc name="xxx" /> <component doc:name="Java Component"> <singleton-object class="xxx.xxx"/> </component> </flow>
<spring:beans> <spring:bean id="xxId" name="xxName" class="xxx.xxx" scope="singleton" /> </spring:beans> <flow name="testFlow"> <xx:inbound-endpoint doc name="xxx" /> <component doc:name="Java Component"> <spring-object bean="xxName"/> </component> </flow>
用這兩種方式設置的singleton訪問均可以保證數據正常被統計,固然,在統計完成後須要將這些屬性歸零。request