【问题标题】:FBDriver reporting warnings I can't figure out how to fixFBDriver 报告警告我不知道如何修复
【发布时间】:2022-01-05 18:17:51
【问题描述】:

我正在开发一个 RESTful 应用程序,每当我发出请求时,它都能正常工作,但也会输出以下警告:

o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Warning Code: 0, SQLState: null
o.h.engine.jdbc.spi.SqlExceptionHelper   : Connection.isValid does not support non-zero timeouts, timeout value 5 has been ignored

将 Spring Boot 框架与 Hibernate、HikariCP、QueryDSL 和使用 Jaybird 4.0.5.java11 版本的 Firebird 数据库结合使用。

这是我的application.yml 文件,我在其中设置了与数据库的连接:

spring:
  datasource:
    driver-class-name: org.firebirdsql.jdbc.FBDriver
    url: jdbc:firebirdsql://localhost:3050/C:\\path\\to\\my\\database.fdb?encoding=win1252
    username: myuser
    password: mypassword
    hikari:
      connection-timeout: 1000
      login-timeout: 1000
      minimum-idle: 10

  jpa:
    database-platform: org.hibernate.dialect.FirebirdDialect
    hibernate:
      ddl-auto: validate

我已经尝试了所有可以设置超时的选项,但没有一个能消除超时警告。

另外,我无法弄清楚 SQL 警告代码:0,从我目前收集的信息来看,这意味着它有效,但为什么它会输出警告?

我应该提到我已经更改了一些敏感信息,它们被替换为 path\\to\\my\\database.fdbmyusermypassword,但这些设置工作正常。

【问题讨论】:

    标签: java spring-boot jdbc firebird jaybird


    【解决方案1】:

    原因是 Jaybird 当前不支持 Connection.isValid(int) 的超时并忽略它,因此 - 如果指定的超时时间不为零 - 它 registers a SQLWarning 在连接上(而不是抛出异常)。尽管 JDBC 规范中没有指定在此处注册警告,但这类似于 JDBC 在配置结果集类型、并发性和可保持性时替换/忽略用户指定的值时要求驱动程序执行的操作。

    当 Hibernate 注意到连接上注册了一个警告时,它会在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper 中记录该警告。可以通过设置属性hibernate.jdbc.log.warnings=false 禁用此警告记录(请参阅Hibernate 文档中的Query Settings)。在 Spring Boot 的情况下,我想您可以将其设置为属性 spring.jpa.properties.hibernate.jdbc.log.warnings(但我尚未验证)。

    超时可通过 HikariCP 属性 validationTimeout 进行配置,但是 - 默认情况下 - 这不接受低于 250 毫秒的值(您可以使用系统属性 com.zaxxer.hikari.timeoutMs.floor 更改它)。或者,您可以将 HikariCP 属性 connectionTestQuery 配置为 - 例如 - select 1 from rdb$database,因此 HikariCP 使用测试查询而不是 Connection.isValid(int)。请注意,测试查询的开销更大。

    打印的警告代码是SQLWarning.getErrorCode()(技术上是SQLException.getErrorCode(),也就是供应商代码)。并且鉴于此警告没有错误/警告代码,其值为 0,这仅表示 “没有与此警告关联的特定供应商代码”

    我创建了this issue,看看是否可以在 Jaybird 4.0.6 或 Jaybird 5 中添加实际的超时支持。

    披露:我是 Jaybird 的维护者之一。

    【讨论】:

    • 我将按照您创建的 github 问题检查此“问题”的“修复”。非常感谢您花时间回答我的问题!
    猜你喜欢
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2019-08-08
    • 2020-11-28
    相关资源
    最近更新 更多