2017-03-01 75 views
0

使用Mule,我需要以批處理方式循環一組記錄(不想使用批處理作用域)。在foreach元素中,您可以指定批量大小來分割集合。ForEach範圍中是否支持MEL來確定批量大小?

被說,如果你指定一個數字,它工作得很好。例如

<foreach doc:name="For Each" batchSize="100"> 
    <logger message="#[flowVars.counter]" level="INFO" doc:name="Logger"/> 
</foreach> 

它會按我的意願打印100個元素的批次。但是如果我使用MEL,它會引發NumberFormatException。這裏,XML

<foreach doc:name="For Each" batchSize="#[flowVars.counter]"> 
    <logger message="#[flowVars.counter]" level="INFO" doc:name="Logger"/> 
</foreach> 

異常

ERROR 2017-03-01 09:47:06,121 [main] org.mule.module.launcher.application.DefaultMuleApplication: null 
java.lang.NumberFormatException: For input string: "[flowVars.batchSize]" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[?:1.8.0_121] 
at java.lang.Integer.parseInt(Integer.java:580) ~[?:1.8.0_121] 
at java.lang.Integer.valueOf(Integer.java:740) ~[?:1.8.0_121] 
at java.lang.Integer.decode(Integer.java:1197) ~[?:1.8.0_121] 

我打印的類類型的#[flowVars.batchSize],它是一個整數,所以,不應該是問題所在。相反,我認爲foreach範圍不允許您至少爲此屬性使用MEL。

我的問題是,是或不可能使用MEL來確定一個foreach範圍的批量大小值?

在此先感謝。

回答

1

請注意,這不是運行時錯誤。此錯誤出現在ForEach類的initialise()階段中,換句話說,根據默認配置,不允許動態設置組件的batchSize。問題是他試圖解析xml以獲取batchSize =「」xml標記內的值,並且他找到了一個字符串(#[flowVars.counter])而不是整數(「5」)。

的ForEach以下類:

public class Foreach extends AbstractMessageProcessorOwner implements Initialisable, MessageProcessor, NonBlockingSupported{ 

@Override 
public void initialise() throws InitialisationException 
{.... 
splitter.setBatchSize(batchSize); .... } 

作爲變通,你可以設置一個屬性爲batchSizeForEach和使用$ {} batchSizeForEach

問候參考這個屬性!

+0

是的,使用屬性直接做了工作。謝謝! –