Время от времени я получаю следующую ошибку и не могу понять, почему:
org.jooq.exception.DataAccessException: SQL [select "public"."RefreshTokens"."userId" from "public"."RefreshTokens" where "public"."RefreshTokens"."token" = ?]; This connection has been closed.
Вот самая важная часть трассировки стека:
{
"class" : "org.postgresql.jdbc.PgConnection",
"method" : "checkClosed",
"file" : "PgConnection.java",
"line" : 783
}, {
"class" : "org.postgresql.jdbc.PgConnection",
"method" : "prepareStatement",
"file" : "PgConnection.java",
"line" : 1680
}, {
"class" : "org.postgresql.jdbc.PgConnection",
"method" : "prepareStatement",
"file" : "PgConnection.java",
"line" : 371
}, {
"class" : "org.jooq.impl.ProviderEnabledConnection",
"method" : "prepareStatement",
"file" : "ProviderEnabledConnection.java",
"line" : 109
}, {
"class" : "org.jooq.impl.SettingsEnabledConnection",
"method" : "prepareStatement",
"file" : "SettingsEnabledConnection.java",
"line" : 73
}, {
"class" : "org.jooq.impl.AbstractResultQuery",
"method" : "prepare",
"file" : "AbstractResultQuery.java",
"line" : 239
}, {
"class" : "org.jooq.impl.AbstractQuery",
"method" : "execute",
"file" : "AbstractQuery.java",
"line" : 322
}, {
"class" : "org.jooq.impl.AbstractResultQuery",
"method" : "fetchLazy",
"file" : "AbstractResultQuery.java",
"line" : 393
}, {
"class" : "org.jooq.impl.AbstractResultQuery",
"method" : "fetchLazy",
"file" : "AbstractResultQuery.java",
"line" : 380
}, {
"class" : "org.jooq.impl.AbstractResultQuery",
"method" : "fetchOne",
"file" : "AbstractResultQuery.java",
"line" : 545
}, {
"class" : "org.jooq.impl.SelectImpl",
"method" : "fetchOne",
"file" : "SelectImpl.java",
"line" : 2879
}
Я использую JOOQ (3.11.11) с Postgres (42.2.5.jre7), и я создаю свое соединение и DSLContext
вот так:
val conn = DriverManager.getConnection(
config.databaseUrl, config.databaseUser, config.databasePassword)
DSL.using(conn, SQLDialect.POSTGRES_10)
Я думал, что JOOQ будет управлять соединениями для меня, и мне не нужно открывать / открывать / закрывать их вручную. Я должен использовать что-то вроде DataSource
вместо DriverManager
для JOOQ для автоматической обработки состояния соединения?
И было бы замечательно, если бы кто-то мог сказать мне, почему на самом деле разрывается соединение.