Spring Boot JPA INSERT занимает слишком много времени для 800 записейJAVA

Программисты JAVA общаются здесь
Anonymous
Spring Boot JPA INSERT занимает слишком много времени для 800 записей

Сообщение Anonymous »

Я пытаюсь сохранить до 5000 записей. < /p>
Я использую нормальный репозиторий JPA (

Код: Выделить всё

abcDAO.saveAllAndFlush()
) с

Код: Выделить всё

Spring Transaction
[/b] для вставки всех моих записей.
Я называю этот контроллер вставки в качестве API REST. /> Ниже приведена модель JPA сущности, которую я пытаюсь вставить, < /p>

Код: Выделить всё

package com.abc.def.xyz.entity;

import org.hibernate.annotations.RowId;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@Entity(name = "TABLE_NAME")
@RowId
@Table(name = "TABLE_NAME", schema = "SCHEMA_NAME")
public class ABCData{

@Id
@Column(name = "unique_id")
private String uniqueId;

@Column(name = "name")
private String name;

@Column(name = "age")
private Integer age;

@Column(name = "lastUpdatedOn")
private java.sql.Timestamp lastUpdatedOn;

@Column(name = "lastUpdatedBy")
private String lastUpdatedBy;

@Column(name = "comments")
private String comments;

}
< /code>
Эта модельная сущность не имеет первичного ключа, который генерируется последовательно или любым способом базой данных Oracle, [b]Id
генерируется третьей стороной [/b] (номер длины от 13 до 15 цифр, преобразованный в строку), и нет возможности добавить еще один столбец с последовательности.

Код: Выделить всё

package com.abc.def;

import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import jakarta.persistence.EntityManagerFactory;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "abcEntityMgrFactry",
transactionManagerRef = "abcTrnsctnMngr", basePackages = {"com.abc.def.xyz.repository" })
public class JPARepoConfig {

private final DataSource abcDs;

public JPARepoConfig(DataSource dataSource) {
this.abcDs = dataSource;
}

@Bean
public EntityManagerFactory abcEntityMgrFactry() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(false);
Map jpaPropMap = new HashMap();

LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("com.abc.def.xyz.entity");
factory.setDataSource(abcDs);
factory.setJpaPropertyMap(jpaPropMap);
factory.afterPropertiesSet();

return factory.getObject();
}

@Bean
public PlatformTransactionManager abcTrnsctnMngr() {
JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(abcEntityMgrFactry());
return txManager;
}
}
Внутри моей службы я использую имя транзакции " abctrnsctnmngr " Как ниже,

Код: Выделить всё

@Transactional(transactionManager = "abcTrnsctnMngr", rollbackFor = Exception.class)
public String saveAbcData(ABCData abcData) throws SQLException {
try {

abcDao.saveAll(abcData);
}catch(Exception e){
throw new Exception("Excetion -"+e.getMessage());
}
Как улучшить Abcdao.saveallandflush () , чтобы занять меньше времени и вставить больше записей с вышеупомянутым объектом объекта? Свойства моего jparepoconfig но я не вижу улучшения,

Код: Выделить всё

jpaPropMap.put("hibernate.order_updates",true);
jpaPropMap.put("hibernate.order_inserts",true);
jpaPropMap.put("hibernate.jdbc.batch_size",100);
Есть ли другие улучшения, которые можно сделать?

Подробнее здесь: https://stackoverflow.com/questions/796 ... 00-records

Вернуться в «JAVA»