Kotliquery не закрывает связи postgresql

Я использую Kotlin с картой kotliquery jdbc

Просто столкнулся с проблемой. Я использую удаленную базу данных PostgreSQL. После небольшого вызова базы данных я получаю следующую ошибку Failure: too many clients already . Это вызвано отключением 100 соединений.

Я пытаюсь создать 1 пункт, где мне нужно сделать конфиг. Это то, что я называю своим BaseDAO. Соответствующий код для этого класса выглядит следующим образом:

 import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource import kotliquery.Session import kotliquery.sessionOf import javax.sql.DataSource class BaseDAO { companion object { var url: String = "jdbc:postgresql://server.local:5432/myDatabase" var user: String = "postgres" var pass: String = "postgres" val config: HikariConfig = HikariConfig() private fun dataSource(): DataSource { var hikariConfig: HikariConfig = HikariConfig(); hikariConfig.setDriverClassName("org.postgresql.Driver"); hikariConfig.setJdbcUrl(url); hikariConfig.setUsername(user); hikariConfig.setPassword(pass); hikariConfig.setMaximumPoolSize(5); hikariConfig.setConnectionTestQuery("SELECT 1"); hikariConfig.setPoolName("springHikariCP"); hikariConfig.addDataSourceProperty("dataSource.cachePrepStmts", "true"); hikariConfig.addDataSourceProperty("dataSource.prepStmtCacheSize", "250"); hikariConfig.addDataSourceProperty("dataSource.prepStmtCacheSqlLimit", "2048"); hikariConfig.addDataSourceProperty("dataSource.useServerPrepStmts", "true"); var dataSource: HikariDataSource = HikariDataSource(hikariConfig); return dataSource; } @JvmStatic fun getSession(): Session { return sessionOf(dataSource()) } } } 

И один из моих DAO:

 class UserDAO { val toUser: (Row) -> User = { row -> User( row.int("id"), row.string("username"), row.string("usertype") ) } fun getAllUsers(): List<User> { var returnedList: List<User> = arrayOf<User>().toList() using(BaseDAO.getSession()) { session -> val allUsersQuery = queryOf("select * from quintor_user").map(toUser).asList returnedList = session.run(allUsersQuery) session.connection.close() session.close() } return returnedList } } 

Изучив исходный код Kotliquery, я понял, что session.connection.close() и session.close даже не будут необходимы при using (поскольку он закрывает closable который был closable в session ). Но без них я получил ту же ошибку , (пришлось перезапустить базу данных postgresql – 100 простоя подключений).

Мне было интересно, есть ли ошибка в моем коде или это ошибка в Kotliquery?

(также представленный № 6 github, но предположил, что сообщество может быть больше 24 человек

Кажется, что каждый вызов BaseDAO.getSession() создает новый HikariDataSource . Это означает, что каждый Session имеет фактически собственный пул подключений к базе данных . Чтобы решить, что вам нужно поддерживать экземпляр HikariDataSource разному, то есть:

 class BaseDAO { companion object { ... private val dataSource by lazy { var hikariConfig: HikariConfig = HikariConfig(); ... var dataSource: HikariDataSource = HikariDataSource(hikariConfig); dataSource; } @JvmStatic fun getSession(): Session { return sessionOf(dataSource) } } }