这就是我在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