我知道关于这个论点有很多类似的问题,但是我确实需要一个可行的解决方案。
我正在尝试配置Spring Boot和Spring Data JPA以便批量批量插入。
目标是: 提交每个N记录 ,而不是执行repository.save()操作时 提交每个记录 。
repository.save()
从现在开始我一直在尝试application.properties:
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张中。
更新
这是实现:
@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> { }
尝试像这样更改代码:
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 }
PS别忘了打开spring.jpa.show-sql以查看结果
spring.jpa.show-sql