为何SOAP服务查询结果未自动更新?Lookup模式已设逐行重载
我创建了一个简单的SOAP服务:
每次请求之间,数据库会被其他服务修改,但我得到的结果始终相同。Lookup模式已设置为Reload at each row,该模式本应刷新来自数据库的数据流。
补充说明:
以下是tDBInput的查询语句:
SELECT methodes.idMethode AS idDocument, methodes.nomMethode AS nomDocument, methodes.doc_docMaitre AS idDocMaitre, methodes.codeMethode AS codeDocument, typemethode.typeMethode AS typeDocument, donneshse.lienfichier AS nomFichier, donneshse.typeMIME AS typeMIME, LOWER(HEX(methodes.doc_token)) AS tokenDocument, '"+((String)globalMap.get("site"))+"' as test FROM methodes LEFT OUTER JOIN donneshse ON donneshse.idDonne=methodes.donHse LEFT OUTER JOIN typemethode ON typemethode.idTypeMethode=methodes.typeMethode LEFT OUTER JOIN methodes_site ON methode=idMethode WHERE CONCAT(',', CONCAT('"+((String)globalMap.get("site"))+"', ',')) LIKE CONCAT(CONCAT('%,', site), ',%') GROUP BY idDocument
我可能在哪些地方出错导致结果始终不变?
全局变量引用错误:SQL里直接写的
'"+((String)globalMap.get("site"))+"'是固定字符串,不会实际获取globalMap里的site值。要改用Talend正确的变量引用方式,比如'"' + (String)globalMap.get("site") + '"',同时确保tDBInput启用了动态SQL支持,或者用${globalMap.site}这类格式(取决于Talend版本)。这个错误会让WHERE条件始终匹配固定值,自然返回相同结果。Lookup模式场景不匹配:
Reload at each row是Lookup组件处理每行数据时重新加载数据源,但如果SOAP服务每次请求只触发一次完整流程,Lookup只会加载一次,该设置无法生效。要确认流程是否每次请求都重新执行tDBInput查询,而非复用缓存的连接或结果。数据库连接配置问题:检查数据库连接池是否开启缓存,或事务隔离级别设为
REPEATABLE_READ及以上——这会导致同连接内重复查询读取快照数据,看不到外部修改。需确保每次请求使用新连接,或查询前提交/回滚事务强制读取最新数据。Talend服务部署的缓存机制:如果SOAP服务是部署的Talend作业,检查是否开启了作业实例复用或结果缓存。部分部署方式会让作业实例常驻内存,复用之前的查询结果,需配置为每次请求启动新的作业实例。
GROUP BY的潜在问题:若
idDocument不是主键,GROUP BY可能导致结果被固定;另外要确认SELECT中的非聚合列符合数据库GROUP BY规则,避免因数据库特性返回固定行。
内容的提问来源于stack exchange,提问作者Feulgen

