Postgresql jooq很少生成不正确的sql

Postgresql jooq很少生成不正确的sql,postgresql,spring-boot,kotlin,jooq,spring-cloud-gateway,Postgresql,Spring Boot,Kotlin,Jooq,Spring Cloud Gateway,我有一个SpringCloudGateway应用程序将身份验证数据保存到db。应用程序在kubernetes中运行。我有太多不同的情况,有时我有json数据要保存,有时json数据是空的。保存此数据的代码如下所示: with(AUTHENTICATED_SESSION) { context.insertInto(this, ACCESS_TOKEN_MD5_HASH, REFRESH_TOKEN, CONTEXT_DATA) .values(

我有一个SpringCloudGateway应用程序将身份验证数据保存到db。应用程序在kubernetes中运行。我有太多不同的情况,有时我有json数据要保存,有时json数据是空的。保存此数据的代码如下所示:

    with(AUTHENTICATED_SESSION) {
        context.insertInto(this, ACCESS_TOKEN_MD5_HASH, REFRESH_TOKEN, CONTEXT_DATA)
            .values(
                accessTokenMd5,
                refreshToken,
                if (contextData != null) {
                    JSONB.jsonb(objectMapper.writeValueAsString(contextData))
                } else {
                    null
                }
            )
            .execute()
    }
生成的列定义

public final TableField<AuthenticatedSessionRecord, JSONB> CONTEXT_DATA = createField(DSL.name("context_data"), SQLDataType.JSONB, this, "");
有时查询看起来像这样,它会导致下面的异常

insert into "public"."authenticated_session" ("access_token_md5_hash", "refresh_token", "context_data") values (?, ?, ?)
    : -> with bind values      : insert into "public"."authenticated_session" ("access_token_md5_hash", "refresh_token", "context_data") values ('hash', 'token', null)
因此,在极少数情况下,jooq在不转换为jsonb的情况下生成错误的sql

这个问题真的很烦人,因为当这种情况发生时,应用程序根本不可用。重启吊舱会有帮助。很可能只有在应用程序启动后才会出现此问题

使用版本:

jooq 3.14.6 弹簧防尘套2.3.5.1释放 spring云网关2.2.5.1版本 docker容器中的Postgresql 10.12 postgresql驱动程序42.2.5 kotlin 1.4.10
您的问题中有一个提示,每次我看到它,我都很高兴实现了这个功能:

 at org.jooq_3.14.6.DEFAULT.debug(Unknown Source) ~[na:na]
默认值是指,但它应该在您的情况下。获取无效SQL的原因是,在这些情况下,您没有正确配置的配置


这将有助于您追踪问题,记住jOOQ查询对象不是线程安全的。

您的问题中有一个提示,每次我看到它,我都很高兴实现了此功能:

 at org.jooq_3.14.6.DEFAULT.debug(Unknown Source) ~[na:na]
默认值是指,但它应该在您的情况下。获取无效SQL的原因是,在这些情况下,您没有正确配置的配置


这将有助于您追踪问题,记住jOOQ查询对象不是线程安全的。

无关:请升级到至少3.14.7,因为3.14.5-3.14.6中存在内存泄漏:无关:请升级到至少3.14.7,因为3.14.5-3.14.6中存在内存泄漏:很好,您能在源代码中生成它们的超链接位置吗?Thx@bedla.czech:是的,这就是原因。在没有配置方言的情况下,spring boot试图通过连接进行判断,但在这些罕见的情况下失败了:@Mikke:Oh有趣。你认为这个发现有缺陷吗?为什么有时候它不起作用?当然,一个明确的方言总是更好的,但是省略它可能会更方便…@LukasEder我没有理由相信发现中有bug。我想我的问题是因为我们的开发环境。CI发布新映像并将其部署到kubernetes。数据库容器很少在应用程序启动之前未启动并导致发现失败。幸运的是,这种情况不应该发生在db不在kubernetes pod中的生产环境中。很好,您能在源代码中生成它们的超链接位置吗?Thx@bedla.czech:是的,这就是原因。在没有配置方言的情况下,spring boot试图通过连接进行判断,但在这些罕见的情况下失败了:@Mikke:Oh有趣。你认为这个发现有缺陷吗?为什么有时候它不起作用?当然,一个明确的方言总是更好的,但是省略它可能会更方便…@LukasEder我没有理由相信发现中有bug。我想我的问题是因为我们的开发环境。CI发布新映像并将其部署到kubernetes。数据库容器很少在应用程序启动之前未启动并导致发现失败。幸运的是,这不应该发生在db不在kubernetes吊舱中的生产环境中。
 at org.jooq_3.14.6.DEFAULT.debug(Unknown Source) ~[na:na]