I m running a Ktor server with a PostgreSQL database and just set up the JetBrains Exposed ORM framework with HikariCP for connection pooling (per the recommendation in the Ktor documentation).
My Hikari data source configuration:
val dataSoruce = HikariDataSource(HikariConfig().also {
it.driverClassName = "org.postgresql.Driver"
it.jdbcUrl = "jdbc:postgresql://..."
it.maximumPoolSize = 4
it.isAutoCommit = false
it.transactionIsolation = "TRANSACTION_REPEATABLE_READ"
...
it.validate()
})
val database = Database.connect(dataSource)
Then I execute a query via Exposed:
transaction {
Entity.find { ... }
}
In the DEBUG logs, Exposed logs the query four times.
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG Exposed - SELECT ... FROM ...
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Reset (isolation) on connection org.postgresql.jdbc.PgConnection@e36bb2a
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG Exposed - SELECT ... FROM ...
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Reset (isolation) on connection org.postgresql.jdbc.PgConnection@e36bb2a
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG Exposed - SELECT ... FROM ...
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Reset (isolation) on connection org.postgresql.jdbc.PgConnection@e36bb2a
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG Exposed - SELECT ... FROM
[eventLoopGroupProxy-4-2 @call-handler#6] DEBUG com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Reset (isolation) on connection org.postgresql.jdbc.PgConnection@e36bb2a
I of course only want to be running a single transaction once on one open connection only, but I have no idea what is going on here. I have the same issue with both suspended/async and synchronous transactions. Also, the issue presents itself when using both the DSL and DAO Exposed APIs.
Thank you.