Hikari cp с пружинной загрузкой.. Активные соединения всегда на уровне 1.. Не увеличивается, но не уменьшается до 0

#java #spring-boot #hikaricp

#java #весенняя загрузка #hikaricp

Вопрос:

Я подключаюсь к базе данных db2 с помощью приложения SpringBoot.

Я использую версию SpringBoot 2.1.2. версия db2jcc4 — 4.26.14 При запуске сервера устанавливается соединение с базой данных.

 @ConfigurationProperties(prefix="data.app")
@Bean
public DataSource dataSourceApp(){

return new HikariDataSource(new HikariConfig())
}

@Bean
EntityManagerFactory appEntityManagerFactory(){
LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean ();
emf.setDataSource(dataSourceApp);
emf.setJPAVendorAdaptor(jpaVendorAdaptor);
emf.afterPropertiesSet();
return emf.getObject();

}


@Bean
publc EntityManager appEntityManager()
{
return appEntityManagerFactory.createEntityManager();
}
 

Затем этот EntityManager используется для выполнения запросов для каждого запроса.

Ниже приведены свойства пула соединений

 data.app.minimumIdle=0
data.app.idleTimeout=120000
data.app.driverClassName=com.ibm.db2.jcc.DB2Driver
data.app.jdbcURL=
data.app.username=
data.app.password=
data.app.maximumPoolSize=10
data.app.connectionTimeout=300000
data.app.poolName=
data.app.maxLifetime=130000
data.app.validationTimeout=300000
 

Когда приходит запрос

 @Autowired
Entitymanager entityManager;

Query query= entitymanager. CreateNativeQuery(queryString) ;

ExecuteQueries(query, queryString) 
 

При первом запуске приложения активные соединения отображаются как 0 (включен мониторинг Hikari)
При выполнении 1stquery активные соединения увеличиваются до 1 и остаются равными 1, даже если выполняется несколько запросов. И даже после достижения времени ожидания и максимального времени жизни. Как мне вернуть это соединение в пул. Я пробовал использовать entitymanager.
Close() в блоке finally.. Но это также не возвращает соединение в пул.
Любая помощь приветствуется. Спасибо.

Заранее спасибо .

Ответ №1:

Попробуйте удалить minimumIdle свойство.

Из документов Hikari

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

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

Комментарии:

1. Спасибо за ответ. Я удалил минимальное значение из свойств. Проблема, похоже, заключается в том, как я создаю EntityManager EntityManager при изменении publc EntityManager appEntityManager() { вернуть appEntityManagerFactory.createEntityManager(); } на publc EntityManager appEntityManager() { вернуть SharedEntityManagerCreator.createSharedEntityManager(appEntityManagerFactory); } проблема была решена. Соединение удаляется в пул после выполнения запроса.