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

には、便利なSelectAllUserwhere 句がありませんSelectAllUser.ack

実際、ack クエリは設定DeltaProcessStatus = 'I'しますが、select クエリはそれをチェックしませんDeltaProcessStatus != 'I'。したがって、同じ行が何度も選択されます。

MasterUserID = 1また、 select クエリではなくwhere 句としての ack クエリが非常に疑わしいという事実もあります。更新された行が選択された行と一致しない可能性があります。

編集:もう 1 つの潜在的な問題は、インバウンド エンドポイントでトランザクションを開始しているが、フローが空であるため、このトランザクションを終了するものが何もないことです。トランザクション要素を削除してみてください。流れが空っぽである限り、とにかく無駄です...

于 2014-08-07T16:02:39.217 に答える