是Hibernate,PostgreSQL还是Spring Boot:尝试衡量JDBC REF_CURSOR支持级别时出现意外错误:null

Ken*_*son 4 postgresql hibernate jdbc spring-boot

在我的项目中使用PostgreSQL JDBC驱动程序时,我得到一个奇怪的错误,指出"尝试测量JDBC REF_CURSOR支持级别时出现意外错误:null"

它导致我的应用程序在启动时持续八十到三百秒之间.启动后一切正常.我使用以下驱动程序版本:

(Gradle Dependency style)'org.postgresql:postgresql:9.3-1102-jdbc41'

我的应用程序是一个Spring Boot应用程序,在启动该应用程序时会发生挂起.

打开Hibernate日志记录后,我看到了错误.完整日志位于以下粘贴中.

http://pastebin.com/CAjSyQw9

在它粘贴到该粘贴中的日志的最后一行之后,应用程序挂起八十到三百秒,通常平均约100秒.该应用程序仍然正常启动并按预期工作.

这种错误是否与JDBC驱动程序有关?

有关于这一主题的类似SO问题在这里.

编辑1:

看起来我的粘贴垃圾桶的第69和70行发生了一些非常奇怪的事情.看起来我的org.postgresql.Dialect的指定方言正在改为某些MySQL的东西.

[org.hibernate.dialect.Dialect] : [MySQL5] -> [org.hibernate.dialect.MySQL5Dialect] (replacing [org.hibernate.dialect.MySQL5Dialect])
2014-10-16 08:05:50.561 DEBUG 36916 --- [ost-startStop-1] o.h.b.r.s.internal.StrategySelectorImpl  : Registering named strategy selector [org.hibernate.dialect.Dialect] : [MySQL5InnoDB] -> [org.hibernate.dialect.MySQL5InnoDBDialect] (replacing [org.hibernate.dialect.MySQL5InnoDBDialect])
Run Code Online (Sandbox Code Playgroud)

gjr*_*ber 8

我遇到过同样的问题.我固定它......呃......围绕它的工作,通过增加在回答定义的系统属性在这里.

这与Hibernate和Postgresql如何查找数据库元数据有关.如果数据库中有许多数据类型,则该过程可能需要很长时间,因为每种数据类型都需要SQL往返信息.下面定义的System属性规避了整个元数据检索,并使用Postgresql的Hibernate默认值.

-Dhibernate.temp.use_jdbc_metadata_defaults=false

希望这有助于其他人.