簡體   English   中英

Spring boot JPA批量插入異常處理

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM