Пул соединений HikariCP по умолчанию, запускающий приложение Spring Boot

Я использую версию: 2.1.6.RELEASE из Spring Boot в моих зависимостях pom.xml. Чтобы подключиться к моей базе данных, я ввел в application.properties следующее:

spring.datasource.url= jdbc:postgresql://
spring.datasource.username=
spring.datasource.password=

При проверке количества подключений в postgresql с помощью:

SELECT * FROM pg_stat_activity;

Я вижу каждый раз, когда запускаю приложение, выполняется ровно 10 подключений. Почти у всех одинаковый запрос:

SET application_name = 'PostgreSQL JDBC Driver'

Есть ли способ предотвратить создание такого большого количества подключений приложением? Должен ли я сделать свою собственную конфигурацию пула? Какой ресурс в моем Java-приложении инициализирует эти соединения?

Единственное, о чем я могу думать, это то, что я создаю EntityManager (ы) с аннотацией @Autowired, EntityManager из:

javax.persistence.EntityManager;

Но я читал, что вам следует закрывать только соединение, которое возникает при использовании EntityManagerFactory. Аннотация должна закрывать соединение.

Если вам потребуется дополнительная информация, я могу отредактировать свой пост


person SimonartM    schedule 08.08.2019    source источник


Ответы (3)


Это не утечка соединения, а желаемое поведение. Spring Boot Data использует HikariCP в качестве пула соединений.

Вы можете настроить максимальный размер пула как свойство. Например:

spring.datasource.hikari.maximum-pool-size=5
person Simon Martinelli    schedule 08.08.2019
comment
Могу я установить это на 1? Зачем вам по умолчанию нужно 10 подключений? Может ли снижение этой суммы быть проблемой? - person SimonartM; 08.08.2019
comment
Это не имеет смысла. Как вы думаете, почему 10 подключений - это много? - person Simon Martinelli; 08.08.2019
comment
Каждый поток использует другое соединение? Какой смысл иметь 10 подключений? - person SimonartM; 08.08.2019
comment
Причина в производительности. И да, каждому потоку, который хочет получить доступ к базе данных, будет назначено соединение. HikariCP очень быстро справляется с подключениями. Размер пула зависит от количества одновременных пользователей вашего приложения. - person Simon Martinelli; 08.08.2019
comment
Большое спасибо за это объяснение - person SimonartM; 08.08.2019

HikariCP по умолчанию открывает 10 незанятых соединений,

По умолчанию: 10

Вы можете переопределить minimumIdle, который менее рекомендуется

HikariCP сделает все возможное, чтобы быстро и эффективно добавить дополнительные соединения. Однако для максимальной производительности и быстрого реагирования на всплески запросов мы рекомендуем не устанавливать это значение, а вместо этого разрешить HikariCP действовать как пул соединений фиксированного размера. По умолчанию: то же, что и maximumPoolSize

Или maximumPoolSize, но это влияет на максимальный размер пула подключений

Это свойство управляет максимальным размером, который может достигать пул, включая как незанятые, так и используемые соединения.

person user7294900    schedule 08.08.2019

По умолчанию HikariCP имеет максимум 10 подключений.

Вы можете настроить максимальный размер пула следующим образом:

spring.datasource.hikari.maximum-pool-size=5

Чтобы включить журналы трассировки:

logging.level.com.zaxxer.hikari.HikariConfig=DEBUG
logging.level.com.zaxxer.hikari=TRACE
person Amit Nayak    schedule 25.06.2021