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}
引用此 属性
此致!
使用 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}
引用此 属性此致!