我有一个关于使用文件端点在数据库中插入记录的查询。我想在数据库中插入 json 类型的记录。我创建 json 文件和我插入数据库的所有文件数据。我的查询是我可以在数据库中成功插入所有这些数据,但是连续插入数据并发生错误 键“PRIMARY”的重复条目“1”
我该如何解决这个错误?我不想递归地插入数据。怎么能我只做一次?我使用了以下流程
**File->Json to Object->Splitter->Database**
请帮我
我有一个关于使用文件端点在数据库中插入记录的查询。我想在数据库中插入 json 类型的记录。我创建 json 文件和我插入数据库的所有文件数据。我的查询是我可以在数据库中成功插入所有这些数据,但是连续插入数据并发生错误 键“PRIMARY”的重复条目“1”
我该如何解决这个错误?我不想递归地插入数据。怎么能我只做一次?我使用了以下流程
**File->Json to Object->Splitter->Database**
请帮我
就我个人而言,我会尽量避免使用简单消息存储的幂等过滤器,因为它会防止数据库中数据的潜在更新。
如果您的 DBMS 支持它,我会尝试使用 UPSERT 机制,该机制将有效地使您的查询具有幂等性。这可以在postgresql和mysql中使用 this 来完成。
您可以使用幂等消息过滤器(在拆分器之后)来确保丢弃重复的条目。如果您的 json 表示具有唯一标识符,请使用幂等消息过滤器
<idempotent-message-filter idExpression="#[entry.id]">
<simple-text-file-store directory="./idempotent"/>
</idempotent-message-filter>
否则,使用Idempotent Secure Hash Message Filter(它将根据它们的哈希值过滤消息)
<idempotent-secure-hash-filter messageDigestAlgorithm="SHA26">
<simple-text-file-store directory="./idempotent"/>
</idempotent-secure-hash-message-filter>
请查看以下参考以获取更多信息。
您可以使用 Mule 中的.ack 查询轻松检查重复项...
.ack是在正常查询后自动运行的查询...
您需要创建 .ack 查询,该查询将在您的插入查询后立即运行,并将检查已插入的行并设置标志...
在此处查看如何使用.ack查询:-
http://training.middlewareschool.com/mule/database-transport/
和此处:-
http://www.mulesoft.org/documentation/display/current/JDBC+传输+参考#JDBCTransportReference-Acknowledgment