包装时由Mule richher返回的数据类型显示非常奇怪的行为。它在某些情况下返回ResultSetIterator,在其他时候返回List。我在流程中具有完全相同的配置是唯一的区别,即这里是子流程。当富集程序中的数据库组件在子流中而不是在流中时,返回类型的行为是否有所不同?
<sub-flow name="process.customer">
<enricher target="#[variable:customers]"
doc:name="Customer Enrichment">
<db:select config-ref="MySQLConfig"
doc:name="Customer Query"
fetchSize="3000" streaming="true">
<db:parameterized-query><![CDATA[
SELECT * FROM CUSTOMER WHERE STATUS='ACTIVE'
]]></db:parameterized-query>
</db:select>
</enricher>
<custom-transformer class="com.gdc.transformer.CustomerTransformer" />
<vm:outbound-endpoint exchange-pattern="one-way"
public class CustomerTransformer extends AabstractMessageTransformer{
@Override
public Object transformMessage(MuleMessage message, String
outputEncoding) throws TransformerException {
//Throws ClassCastException i.e. cannot cast ResultSetIterator to
// LinkedList
List<Map<String,Object>> r=
message.getInvocationProperty("customers"));
....
}
}
答案 0 :(得分:0)
使用流媒体=&#34; true&#34;在db:select组件上,您将获得一个ResultSetIterator。在这种情况下,您还有fetchSize =&#34; 3000&#34;,因此它将尝试一次选择3000条记录。 使用streaming =&#34; false&#34;,您将获得一个包含所有适用记录的列表。
答案 1 :(得分:0)
布林,
如果您希望输出为List,如果地图然后禁用Streaming=false
,则需要将输出作为可迭代对象,然后将该属性设为true。