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