[英]Spring boot JPA batch inserts Exception Handling
我正在研究一個實時用例,需要使用 spring boot JPA 將批量消息加載到 SQL 服務器表中,將所有模型對象添加到列表中,並為批量加載repository.saveAll(list)
執行此操作。 由於性能原因,我無法通過記錄插入進行記錄。 我正在尋找以下選項。
有什么方法可以讀取導致錯誤的消息並繼續將其他記錄插入表中。 我必須將此錯誤消息存儲在某處,並且不應傳遞給下游應用程序。
Spring數據JPA的saveAll
方法,其實就是把記錄列表一一保存:
/*
* (non-Javadoc)
* @see org.springframework.data.jpa.repository.JpaRepository#save(java.lang.Iterable)
*/
@Transactional
@Override
public <S extends T> List<S> saveAll(Iterable<S> entities) {
Assert.notNull(entities, "Entities must not be null!");
List<S> result = new ArrayList<S>();
for (S entity : entities) {
result.add(save(entity));
}
return result;
}
仍然,自己處理消息循環或讓它交給 Spring 數據 JPA 來完成工作之間的區別: saveAll
使用屬性spring.jpa.properties.hibernate.jdbc.batch_size=4
來確定批處理是否被激活,以及根據批次的大小,插入可以表現得更好。
我認為您只需要自己循環消息並自己捕獲錯誤:
for(EnitityType entity: list){
try{
repository.save(entity);
} catch (Exception e){
// Do what you want
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.