Spring Boot MySQL не дозирует вставки - PullRequest
0 голосов
/ 04 сентября 2018

Я применил почти все решения, опубликованные здесь на SO, в отношении этой проблемы, но ничего не помогло.

My application.properties :

spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?logger=com.mysql.jdbc.log.Slf4JLogger&rewriteBatchedStatements=true&profileSQL=true&autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=secret
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

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

logging.level.root=info
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5p) %gray(%c{0}::%M) - %m%n

My EntityRepository :

@Repository
public interface EntityRepository extends CrudRepository<Entity, Long> { }

Моя Сущность :

@Data @Entity
public class Entity {

  @Id
  @GeneratedValue(generator = "generator")
  @GenericGenerator(name = "generator", strategy = "increment")
  private Long id;

  private Long attr;

}

И упрощенный код, который вызывает хранилище:

int batchSize = 100;
List<Entity> batchEntities = new ArrayList<>();
for(Entity entity : entities) {
  batchEntities.add(entity);
  if(batchEntities.size() >= batchSize) {
    entityRepository.saveAll(batchEntities);
    batchEntities.clear();
  }
}

Что я сделал:

Согласно этому вопросу SO Я включил опцию profileSQL=true, и журнал производит несколько отдельных вставок. Кроме того, я включил глобальное ведение журнала на сервере SQL, и он также производит последовательность отдельных вставок.

Согласно это еще один вопрос SO и еще один вопрос SO Я убедился, что batch_size задано в файле application.properties, и хотя у меня нет родителя детские отношения Я также пытался использовать order_inserts и order_updates. Также я включил параметр rewriteBatchedStatements=true и использую метод saveAll(...).

Я также пытался отказаться от готового CrudRepository и моего обычного, сбрасывая после каждого batchSize -го сохранения.

Ничто из вышеперечисленного не помогло.

1 Ответ

0 голосов
/ 04 сентября 2018

Следующие свойства не существуют в Spring Boot.

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

Для добавления пользовательских свойств используйте вместо этого префикс spring.jpa.properties.

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

Должен сделать свое дело.

См. Также документацию Spring Boot по , как настроить JPA .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...