mysql - 在 Mule 中插入大量记录时发生错误如何回滚数据库更改?

标签 mysql database mule mule-studio anypoint-studio

我有以下 json 文件

[
    {
         "id": 1,
         "name": "Ramesh",
         "designation": "SE",
         "salary": 25000.00
    },
    {
         "id": 2,
         "name": "Anjali",
         "designation": "SE",
         "salary": 20000.00
    },
    {
         "id": 2,
         "name": "Harrish",
         "designation": "PM",
         "salary": 120000.00
    },
    {
         "id": 4,
         "name": "Rahul",
         "designation": "TA",
         "salary": 150000.00
    }
]

在这里,我想插入所有记录,或者不插入任何记录。意味着这四条记录将全部插入到员工数据库中,或者以上都不插入。但是在这里您可以看到第三条记录具有重复的 id 2,因为第二条记录的 id 保留相同的 id,当我运行以下 mule 应用程序 MySQLIntegrityConstraintViolationException 时,会发生错误,但前 2 条记录作为错误插入到数据库中出现在记录号 3 中。但这里我想要的是,如果所有记录未插入数据库(意味着中间出现任何错误),则防止插入记录或回滚更改。

下面是我的 mule xml 配置文件,用于将 json 数据插入数据库:

<sub-flow name="insert-fulltime-employee-details-subflow">
        <dw:transform-message metadata:id="35bfe913-8de7-4b3c-9ba9-98f375a2873e" doc:name="Transform Message">
            <dw:input-payload mimeType="application/json"/>
            <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
payload map ((payload01 , indexOfPayload01) -> {
    id: payload01.id,
    name: payload01.name,
    designation: payload01.designation,
    salary: payload01.salary
})]]></dw:set-payload>
        </dw:transform-message>
        <foreach doc:name="For Each">
            <db:insert config-ref="MySQL_Configuration" doc:name="Database-Insert">
                <db:parameterized-query><![CDATA[insert into fulltime_employee values (#[payload.id], #[payload.name], #[payload.designation], #[payload.salary])]]></db:parameterized-query>
            </db:insert>
        </foreach>
        <set-payload value="{&quot;message&quot;: &quot;All data successfully inserted into database&quot;}" mimeType="application/json" doc:name="Set Payload"/>
</sub-flow>

我怎样才能实现这个目标?

最佳答案

将必须回滚的 block 包装在“事务范围”中。就像下面这样,

<transactional action="ALWAYS_BEGIN" doc:name="Transactional">
<db:insert config-ref="MySQL_Configuration" doc:name="Database-Insert">
                <db:parameterized-query><![CDATA[insert into fulltime_employee values (#[payload.id], #[payload.name], #[payload.designation], #[payload.salary])]]></db:parameterized-query>
            </db:insert>
</transactional>

关于mysql - 在 Mule 中插入大量记录时发生错误如何回滚数据库更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228041/

相关文章:

mysql - Django 按日期和 SUM 值分组

mysql - 如何在 MySQL 中返回数据透视表输出?

mysql - 尝试从同一个表中获取匹配和不匹配的值

php - 数据库表代码的目录更新

mysql - mysql 触发器中使用“like”关键字

file-upload - 发送文件到 Mule 入站端点

mysql - 尝试将数据插入 MySQL 时出现 "You have an error in your SQL syntax"

python - 在 Anypoint Studio(以前称为 Mule Studio)中调试 Python (Jython) 代码

web-services - 如何为仅通过 Mule ESB 的 HTTPS 公开的远程 WSDL 指定 SSL 证书详细信息?

c# - 如何在 C# 中将 bool 值转换为 int 并将其保存到 MySQL 表中?