-1

我有一个入站数据库端点正在选择具有返回 500 行作为结果集的条件的记录。现在我想在另一个 DB 中插入列。我使用批处理并有两个批处理步骤选择数据和插入数据。现在,如果在选择数据时发生任何错误,我必须发送一封邮件,如果在插入时失败,我需要将其记录在不同的地方。那么如何为每个步骤创建两个不同的异常,无法使用 catch 异常批处理。现在我在批处理步骤中使用流引用并处理异常。请提供更好的方法。我使用批处理执行->批处理->批处理步骤->流引用->异常处理

 <batch:job name="BOMTable_DataLoader">
    <batch:process-records>
        <batch:step name="SelectData">
            <flow-ref name="InputDatabase" doc:name="InputDatabase"/>
        </batch:step>
        <batch:step name="InsertData">
            <batch:commit size="1000" doc:name="Batch Commit">
                <flow-ref name="InserDatabase" doc:name="UpdateDataBase"/>
            </batch:commit>
        </batch:step>
    </batch:process-records>
    <batch:on-complete>
4

1 回答 1

0

仅对于 500 行,我不会使用批处理,您可以简单地通过迭代创建一个 SQL 脚本,一次性完成所有插入,并通过数据库连接器执行它。

如果您想知道哪个插入失败,您可以使用 foreach 处理器遍历行并一一插入,以便您可以控制输出,它会更慢,但这完全取决于您的需要。

只需根据您的需要使用正确的查询类型,并记住您可以在查询中使用 MEL。如果您的输入也来自不受信任的来源,请注意注入(如果您使用参数化查询而不是安全方面,因为参数被转义了)

更多关于 db 连接器 https://docs.mulesoft.com/mule-user-guide/v/3.7/database-connector


在您的问题更新后,我确实确认处理异常的唯一方法是您使用它的方式。mule 中的模块被称为“批处理”这一事实并不意味着每次您有一些看起来像批处理作业的东西时,您都需要使用该组件。当您遇到一些复杂的情况时,请不要使用它,而是使用标准的 mule 组件(例如 VM async 进行异步执行)和普通工具(例如 foreach 甚至更好的集合拆分器)并获得对异常处理的所有自由和控制。

于 2016-01-21T09:05:17.553 回答