#java #spring #multithreading #connection-pooling #hikaricp
#java #весна #многопоточность #объединение пулов соединений #hikaricp
Вопрос:
У меня есть приложение, которое считывает сообщения из IBM MQ, обрабатывает их и записывает данные в Oracle db.
Приложение настроено на 6 одновременных потоков (должно обрабатывать максимум 6 сообщений одновременно, если я правильно понимаю) и минимум и максимум 12 подключений в пуле подключений.
В качестве теста я записываю в очередь 30 сообщений, которые выполняют довольно трудоемкие операции с БД. Поскольку существует только 6 потоков и 12 подключений, насколько я понимаю, для нового потока всегда должно быть доступное соединение.
Но я постоянно вижу, что getConnection занимает более 300 мс.
Вот соответствующая часть конфигурации:
spring:
jms:
cache.enabled: false
listener:
concurrency: 1
max-concurrency: 6
datasource:
driverClassName: "oracle.jdbc.OracleDriver"
url: "[dbUrl]"
username: "user"
password: "pw"
hikari.minimum-idle: 12
hikari.maximum-pool-size: 12
Я использую Spring 5.2.5 с Spring Boot 2.2.6.
Чего мне не хватает? Я ожидал, что getConnection всегда будет возвращаться в течение нескольких мс, даже если операции с БД могут занимать много времени?