我有一个入站数据库端点正在选择条件,该条件返回500行作为结果集。现在我想将coloumns插入另一个DB.I使用批处理并有两个批处理步骤选择数据和插入数据。 现在,如果在选择数据时发生任何错误,我必须发送邮件,如果在插入时如果失败,我需要将其记录在不同的地方。那么如何为每个步骤创建两个不同的异常我无法使用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>
答案 0 :(得分:0)
仅限500行我不会使用批处理您可以简单地使用迭代创建一个SQL脚本,一次性插入所有插入并通过数据库连接器执行它。
如果你想知道哪个插件失败了,你可以使用foreach处理器迭代行并逐个插入它们以便你可以控制输出,它会慢一些,但这一切都取决于你的需要。
根据您的需要使用正确类型的查询,并记住您可以在查询中使用MEL。如果您的输入也来自不受信任的来源,请注意注入(如果您使用参数化查询而不是安全方面因为参数被转义)
有关db连接器的更多信息 https://docs.mulesoft.com/mule-user-guide/v/3.7/database-connector
我在你的问题更新后确认,处理异常的唯一方法就是你使用它的方式。 mule中的模块称为“批处理”这一事实并不意味着每次有类似批处理作业的东西时都需要使用该组件。当你遇到一些复杂的情况时,就不要使用它并使用标准的mule组件,比如异步执行的VM异步和foreach等常规工具,甚至更好的收集拆分器,并获得对异常处理的所有自由和控制。