使用Mule,我需要以批处理方式循环记录集合(不要使用批处理范围)。在foreach元素中,您可以指定要对集合进行分区的批处理大小。
据说,如果你指定一个数字就可以了。例如
<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]的类类型,它是一个Integer,所以不应该是问题。相反,我认为foreach范围不允许您至少使用MEL来处理此属性。
我的问题是,是否或不可能使用MEL来确定foreach范围的批量大小值?
提前致谢。
答案 0 :(得分:1)
请注意,这不是运行时错误。此错误出现在ForEach类的initialise()阶段,换句话说,根据默认配置,您不允许动态设置组件的batchSize。问题是他正在尝试解析xml以获取batchSize =&#34;&#34;中的值。 xml标签,他找到一个字符串(#[flowVars.counter])而不是整数(&#34; 5&#34;)。
以下ForEach课程:
public class Foreach extends AbstractMessageProcessorOwner implements Initialisable, MessageProcessor, NonBlockingSupported{
@Override
public void initialise() throws InitialisationException
{....
splitter.setBatchSize(batchSize); .... }
作为解决方法,您可以将一个属性设置为batchSizeForEach,并使用$ {batchSizeForEach}
引用此属性问候!