Mule中的Jdbc确认(ACK)

Mule中的Jdbc确认(ACK),mule,mule-studio,mule-el,mule-component,mule-cluster,Mule,Mule Studio,Mule El,Mule Component,Mule Cluster,在从数据库获取数据后,我喜欢将数据库列deltaprocessstatus更新为“I” 下面是我的代码 <spring:beans> <context:property-placeholder location="classpath:mule-app.properties"/> </spring:beans> <jdbc-ee:mssql-data-source name="MS_SQL_Data_Source" user="S

在从数据库获取数据后,我喜欢将数据库列deltaprocessstatus更新为“I”

下面是我的代码

<spring:beans> 
    <context:property-placeholder location="classpath:mule-app.properties"/>
    </spring:beans>
    <jdbc-ee:mssql-data-source name="MS_SQL_Data_Source" user="Ssssss" password="ffff" url="jdbc:sqlserver://localhost" transactionIsolation="UNSPECIFIED" doc:name="MS SQL Data Source"/>
    <jdbc-ee:connector name="ProSFDB" dataSource-ref="MS_SQL_Data_Source" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database" transactionPerMessage="false">
        <jdbc-ee:query key="SelectAllUser" value="SELECT top 100 * from master_user_Queue"/>
        <jdbc-ee:query key="SelectAllUser.ack" value="update master_user_Queue set DeltaProcessStatus = 'I' where MasterUserID = 1"/>
        <jdbc-ee:query key="SelectbatchWiseInfo" value="Select top 100 * from  master_user_Queue where MasterUserID between #[payload['min']] and #[payload['max']]"/>

    </jdbc-ee:connector>
    <amqp:connector name="AMQP_Connector" validateConnections="true" host="${amqp.host}" port="${amqp.port}" virtualHost="${amqp.virtualhost}" username="${amqp.username}" password="${amqp.password}" doc:name="AMQP Connector"/>

    <spring:beans>
        <spring:bean id="objectStore" name="Bean" class="org.mule.util.store.SimpleMemoryObjectStore"/>       
    </spring:beans>

    <data-mapper:config name="Map_To_Map" transformationGraphPath="map_to_map.grf" doc:name="Map_To_Map"/>

    <flow name="asi_1_user_deactivationFlow1" doc:name="asi_1_user_deactivationFlow1" processingStrategy="synchronous">
        <jdbc-ee:inbound-endpoint exchange-pattern="one-way"  queryTimeout="-1" pollingFrequency="6000" doc:name="Database" connector-ref="ProSFDB" queryKey="SelectAllUser" tracking:enable-default-events="true">
            <jdbc-ee:transaction action="ALWAYS_BEGIN"/>
        </jdbc-ee:inbound-endpoint>
</flow>

查询键“SelectAllUser”工作正常,但一旦调用“SelectAllUser”,查询键“SelectAllUser.ack”就不工作。我不知道我错在哪里


提前感谢。

SelectAllUser
缺少where子句,该子句将使
SelectAllUser.ack
变得有用

实际上,ack查询设置
DeltaProcessStatus='I'
,但select查询不检查
DeltaProcessStatus!='I'
。因此,将一次又一次地选择相同的行

另外,ack查询作为where子句使用
MasterUserID=1
而不是select查询这一事实也是非常可疑的。存在更新的行与所选行不匹配的风险


编辑:您面临的另一个潜在问题是,您正在入站端点中启动一个事务,但由于流为空,因此没有任何东西可以结束此事务。能否尝试删除事务元素?只要流是空的,它就毫无用处…

运行它时发生了什么?你只是没有得到数据库更新吗?控制台日志中有任何指示失败的信息吗?@SteveS我没有得到数据库更新。我在运行流时没有遇到任何失败。因此,相同的行会一次又一次地被选中,对吗?是的,David,但我的流不是空的。我使用了许多Transformer和消息处理器,为了避免冗长,我没有包含完整的代码。谢谢你的回复David,我编辑了我的代码,但我的ack仍然没有被自动调用。好的,添加了一个关于启动事务但不结束事务的注释。