1

从数据库中获取数据后,我喜欢将我的数据库列 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.ack”在调用“SelectAllUser”后不起作用。我不知道我哪里错了。

提前致谢。

4

1 回答 1

1

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

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

此外,ack 查询作为 where 子句MasterUserID = 1而不是 select 查询这一事实非常可疑。更新的行可能与所选行不匹配。

编辑:您遇到的另一个潜在问题是您正在入站端点中启动事务,但由于流程为空,因此没有任何内容可以结束此事务。您可以尝试删除事务元素吗?只要流量是空的,它无论如何都没用......

于 2014-08-07T16:02:39.217 回答