#java #spring-boot #hibernate #jpa #spring-data-jpa
#ява #пружинный ботинок #впадать в спящий режим #jpa #spring-data-jpa #java #spring-boot #переход в спящий режим
Вопрос:
Я работаю над вариантом использования в реальном времени, который должен загружать пакет сообщений в таблицу SQL Server с помощью spring boot JPA, добавляя все объекты модели в список и делая это для пакетных загрузок repository.saveAll(list)
. Из-за производительности я не могу выполнять запись путем вставки записей. Я ищу приведенный ниже вариант.
Могу ли я каким-либо образом прочитать сообщение об ошибке и продолжить вставку других записей в таблицу. Я должен где-то сохранить это сообщение об ошибке и не должен передавать его нижестоящим приложениям.
Ответ №1:
saveAll
Метод Spring data JPA фактически сохраняет список записей одну за другой:
/*
* (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 resu<
}
Тем не менее, разница между обработкой цикла сообщений самостоятельно или предоставлением его Spring data 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
}
}
Комментарии:
1.
insertAll
использует свойствоspring.jpa.properties.hibernate.jdbc.batch_size=4
, чтобы определить, активирована пакетная обработка или нет, и в зависимости от размера пакета вставка может выполняться лучше. Я думаю, что с точки зрения производительности это не то же самое, что создание пользовательского цикла