Spring Boot和Spring Data JPA无法正常运行的批量插入

时间:2018-06-05 07:21:16

标签: spring-boot spring-data-jpa bulkinsert

我知道关于这个论点有很多类似的问题,但我真的需要一个有效的解决方案。

我试图配置Spring Boot和Spring Data JPA,以便批量批量插入。

目标是:提交每个N记录,而不是在执行repository.save()操作时每个记录。

我从application.properties开始尝试过的事情:

spring.jpa.properties.hibernate.jdbc.batch_size=100
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.order_updates=true
spring.jpa.properties.hibernate.generate_statistics=true

但没有成功。我已经监控了数据库,并且记录一个接一个地保存在表中,而不是像我配置的那样100到100个。

更新

以下是实施:

@Component
public class BulkInsert {

    @Autowired
    MyRepository repository;

    public void process() {

        PodamFactory podamFactory = new PodamFactoryImpl();

        for(int i=0;i<10000;i++) {
            MyEntity myEntity = podamFactory.manufacturePojo(MyEntity.class);
            repository.save(myEntity);
        }

    }
}

这是实体:

@Entity
@Table(name="MYTABLE")
@NamedQuery(name="MyEntity.findAll", query="SELECT m FROM MyEntity m")
public class MyEntity implements Serializable {
    private static final long serialVersionUID = 1L;

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

    @Id
    @Column(name="ID")
    private String id;

    public MyEntity() {
    }

    // getters and setters

}

存储库:

public interface MyRepository extends CrudRepository<MyEntity, String> {

}

2 个答案:

答案 0 :(得分:0)

尝试更改您的代码:

public void process() {

    PodamFactory podamFactory = new PodamFactoryImpl();
    List<MyEntity> myEntities = new ArrayList<>(10000);

    for(int i = 0; i < 10000; i++) {
        myEntities.add(podamFactory.manufacturePojo(MyEntity.class));
    }

    repository.save(myEntities); // for Spring Boot prior 2.0
    // repository.saveAll(myEntities); - for Spring Boot since 2.0
}

P.S。不要忘记打开spring.jpa.show-sql查看结果

答案 1 :(得分:0)

就我而言,即使在这些配置下,批量插入程序也无法正常工作。

事实证明,如果实体使用GenerationType.IDENTITY标识符生成器,​​则Hibernate将以静默方式禁用批处理插入/更新。

也许这会帮助别人。

来源:http://kyriakos.anastasakis.net/2015/06/12/batch-inserts-with-spring-data-and-mysql/

我正在使用:

  • MySql 5.6
  • 春季靴2.1.9
  • JPA和休眠状态