Mule使用语句(来自java.sql),因此不支持以这种方式使用IN。每次出现的MEL表达式(#[])都将替换为问号(?),并且实际值将作为参数传递。我建议您通过动态构建查询并将其分配给JDBC连接器并使用通用端点执行它来解决此问题。
创建一个这样的Java类:
public class CustomQueryBuilder implements Callable {@Overridepublic Object onCall(MuleEventContext eventContext) throws Exception { JdbcConnector c = (JdbcConnector) eventContext.getMuleContext().getRegistry().lookupConnector("JDBC_connector"); StringBuilder query = new StringBuilder(); String querybase = "select * from another_table where first_table_fk in ("; query.append(querybase); int numIndices = ((ArrayList<Integer>)eventContext.getMessage().getInvocationProperty("indices")).size(); ArrayList<String> indices = new ArrayList<String>(); for(int i=0; i<numIndices; i++) { indices.add("#[flowVars.indices[" + i + "]"); } query.append(StringUtils.join(indices, ", ")); query.append(")"); String finalQuery = query.toString(); MessageDigest md = MessageDigest.getInstance("MD5"); String queryDigest = String.format("%12X",new BigInteger(1, md.digest(finalQuery.getBytes("UTF-8")))); if (!c.getQueries().containsKey(queryDigest)) { c.getQueries().put(queryDigest, finalQuery); } eventContext.getMessage().setInvocationProperty("generatedQueryKey", queryDigest); return eventContext.getMessage();}
}
设置“索引”流变量后,请在流中使用它。
<component />
然后插入通用出站终结点而不是jdbc出站终结点,并引用创建的查询。
<outbound-endpoint exchange-pattern="request-response" address="jdbc://#[flowVars.generatedQueryKey]" />
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)