如何使用JPA EntityManager提高批量插入的性能?

时间:2017-04-12 06:01:52

标签: hibernate jpa entitymanager hibernate-entitymanager

这就是我在JPA中使用EntityManager进行批量插入的方法。批量大小当前设置为50.我不能为每个批量大小调用提交。要么提交整个交易,要么一无所有。

方法bulkInsert()由另一个类中的单独方法调用,并标记为@Transactional

如何使插入更快?我插入的行数高达200K。

class MyRepo{

@PersistenceContext
    private EntityManager em;

    @Value(value = "${batch_size}")
    private int batchSize;

    @Override
    public List<Object> bulkInsert(List<Object> objects) {

        IntStream.range(0, objects.size()).forEach(index -> {
            em.persist(objects.get(index));

            if (index + 1 % batchSize == 0) {
                em.flush();
                em.clear();
            }
        });

        em.flush();
        em.clear();

        return objects;
    }
}

我还设置了以下属性以避免postgres连接丢失,我仍然面临这种情况。尽管下面的属性,连接本身就会关闭。

spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1
spring.datasource.tomcat.validation-interval=0

0 个答案:

没有答案