spring-jpa-bulk

Configuration and simple benchmarks of 5 ways of setting up bulk inserts ("batch" inserts) in a Spring/JPA environment using Hibernate and an in-memory H2 database:

  1. Using a default loop of EntityManager.persist(...).

  2. Same as 1., but flushing and clearing the EntityManager every n iterations.

  3. Using Hibernate's StatelessSession and a community provided Spring integration.

  4. Using JdbcTemplate.

  5. Using JDBI.

The project is Maven based.

Benchmarks

Run the benchmarks with

mvn test

The benchmarks are implemented using JUnitBenchmarks, which conveniently measures the elapsed time of a JUnit test method. The JUnit test method at hand inserts 500000 entities and checks their count.

Sample output snip on my machine (time measurements in seconds):

DefaultBulkOperationsTest.bulkInsert:
 round: 6.88 [+- 1.38] ...

FlushingBulkOperationsTest.bulkInsert:
 round: 4.19 [+- 0.75] ...

StatelessSessionBulkOperationsTest.bulkInsert:
 round: 2.57 [+- 0.81] ...

JdbcTemplateBulkOperationsTest.bulkInsert:
 round: 1.79 [+- 0.50] ...

JdbiBulkOperationsTest.bulkInsert:
 round: 4.27 [+- 0.58] ...