Очень медленно работает JPA в многопоточном варианте записи в БД

Рейтинг: 0Ответов: 0Опубликовано: 17.04.2023

настройки проперти

jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true
        jdbc:
          batch_size: 50
        naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
    my_basa:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQL95Dialect
        jdbc:
          batch_size: 50
          order_inserts: true
          lob.non_contextual_creation: true
          generate_statistics: true


task:
     execution:
       pool:
          core-size: 100
          max-size: 100
          queue-capacity: 1000
          keep-alive: 120s
            await-termination: true
            allow-core-thread-timeout: false
          shutdown:
            await-termination-period: 5m
          thread-name-prefix: DiaSoftReplicatorThread-

разбиение коллекции на бачи и отправление каждого бача на запись в многопоточку

private void saveAllJdbcBatchCallable(List<MyDATA> source) {
        try {
            List<List< MyDATA >> partition = Lists.partition(source, batchSize);
            List<Callable<Void>> callables = partition.stream().map(sublist ->
                    (Callable<Void>) () -> {
                        saveDataToBD(sublist);
                        return null;
                    }).collect(Collectors.toList());
            taskExecutor.getThreadPoolExecutor().invokeAll(callables);
        } catch (Exception e) {
        }
    }

метод записи в БД

public void saveDataToBD(List<MyDATA> source) {
        myJpaRepository.saveAll(source);
    }

вопрос в том, где то не верно настроена многопоточка или jpa в принципе не нуждается в многопоточке если используется batch_size.

Ответы

Ответов пока нет.