ForEach 范围是否支持 MEL 以确定批量大小?

Is MEL supported in ForEach scope to determine the batch size?

使用 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]

我打印了 class 类型的 #[flowVars.batchSize] 并且它是一个整数,所以这应该不是问题所在。相反,我认为 foreach 范围不允许您至少为此 属性 使用 MEL。

我的问题是,是否可以使用 MEL 来确定 foreach 范围的批量大小值?

提前致谢。

请注意,这不是运行时错误。这个错误出现在class ForEach的initialise()阶段,换句话说,根据默认配置,你不允许动态设置组件的batchSize。问题是他试图解析 xml 以获取 batchSize="" xml 标记内的值,但他找到了一个字符串 (#[flowVars.counter]) 而不是整数("5").

ForEach class 下面:

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

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

作为解决方法,您可以将一个 属性 设置为 batchSizeForEach 并使用 ${batchSizeForEach}

引用此 属性

此致!