2017-03-01 81 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

是的,使用属性直接做了工作。谢谢! –