Mule中的Jdbc确认(ACK)

时间:2014-08-07 13:58:44

标签: mule mule-studio mule-el mule-component mule-cluster

我喜欢将我的数据库列deltaprocessstatus更新为'我'从数据库中获取数据后。

以下是我的代码

<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>

查询键&#34; SelectAllUser&#34;工作正常但查询键&#34; SelectAllUser.ack&#34; &#34; SelectAllUser&#34;&#34; SelectAllUser&#34;叫做。我不知道自己哪里出错了。

提前致谢。

1 个答案:

答案 0 :(得分:1)

SelectAllUser缺少一个使SelectAllUser.ack有用的where子句。

确实,ack查询设置了DeltaProcessStatus = 'I',但是选择查询没有检查DeltaProcessStatus != 'I'。因此,将一次又一次地选择相同的行。

此外,ack查询为带有MasterUserID = 1的where子句而非select查询的事实非常可疑。更新的行与选定的行不匹配存在风险。

编辑:您遇到的另一个潜在问题是您在入站端点中启动事务,但由于流为空,因此没有任何事情可以结束此事务。你能尝试删除交易元素吗?只要流量是空的,它就没用了......