使用 play framework v1.5 连接 db postgresql 时出错

Posted

技术标签:

【中文标题】使用 play framework v1.5 连接 db postgresql 时出错【英文标题】:Error when connected db postgresql with play framework v1.5 【发布时间】:2018-04-02 14:12:33 【问题描述】:

我使用的是play framework v1.5,在我的“application.conf”文件中使用以下参数配置数据库:

db.url=jdbc:postgresql:test
db.driver=org.postgresql.Driver
db.user=test
db.pass=123

连接db postgresql,但是当我启动项目时抛出这个错误

错误

 A database error occurred : Cannot connected to the database[default], Method org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is not yet implemented. 

记录错误

@77f2flm68
Internal Server Error (500) for request GET /

Database error
A database error occurred : Cannot connected to the database[default], Method org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is not yet implemented.

play.exceptions.DatabaseException: Cannot connected to the database[default], Method org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is not yet implemented.
at play.db.DBPlugin.onApplicationStart(DBPlugin.java:118)
at play.plugins.PluginCollection.onApplicationStart(PluginCollection.java:600)
at play.Play.start(Play.java:549)
at play.Play.detectChanges(Play.java:672)
at play.Invoker$Invocation.init(Invoker.java:220)
at Invocation.HTTP Request(Play!)
Caused by: org.postgresql.util.PSQLException: Method org.postgresql.jdbc4.Jdbc4Connection.isValid(int) is not yet implemented.
at org.postgresql.Driver.notImplemented(Driver.java:753)
at org.postgresql.jdbc4.AbstractJdbc4Connection.isValid(AbstractJdbc4Connection.java:109)
at org.postgresql.jdbc4.Jdbc4Connection.isValid(Jdbc4Connection.java:21)
at com.zaxxer.hikari.pool.PoolBase.checkDriverSupport(PoolBase.java:434)
at com.zaxxer.hikari.pool.PoolBase.setupConnection(PoolBase.java:405)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:363)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:443)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:514)
at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:111)
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:97)
at play.db.DBPlugin.testDataSource(DBPlugin.java:124)
at play.db.DBPlugin.onApplicationStart(DBPlugin.java:106)
... 5 more

我尝试将 jdbc 更新到最新版本,但错误仍然存​​在。

dependencies.yml 文件

# Application dependencies

require:
    - play
    - play -> docviewer
    - play -> secure
    - org.postgresql -> postgresql 42.2.2

执行“play deps”后的日志

   _ __ | | __ _ _  _| |
~ | '_ \| |/ _' | || |_|
~ |  __/|_|\____|\__ (_)
~ |_|            |__/   
~
~ play! 1.5.0, https://www.playframework.com
~
~ Resolving dependencies using /home/navastud/eclipse-workspace   /initialtemplate/conf/dependencies.yml,
~
~
~ Some dependencies have been evicted,
~
~   postgresql 42.2.2 is overridden by postgresql 9.0
~
~ Installing resolved dependencies,
~
~   modules/docviewer -> /home/navastud/play-1.5.0/modules/docviewer
~   modules/secure -> /home/navastud/play-1.5.0/modules/secure
~
~ Done!

如何解决连接postgresql数据库的问题?

【问题讨论】:

"postgresql 42.2.1 is overridden by postgresql 9.0" 表示您的驱动程序被一个非常旧的版本覆盖。不过不知道 play 是如何处理的。 据说应该把postgresql的jdbc驱动换成依赖文件里的那个,不知道有没有这个错误 这个错误很相关,因为PostgreSQL JDBC 9.0驱动很古老,没有实现isValid(int) ok,但是在更新jdbc驱动之前就报错了 我会改写:您认为您使用的是 PostgreSQL JDBC 驱动程序 42.2.2,但您不是,您显然使用的是 9.0 版。 【参考方案1】:

我在google群playone找到了解决办法

缺少在依赖文件中添加“force: true”

dependencies.yml 文件

# Application dependencies

require:
    - play
    - play -> docviewer
    - play -> secure
    - org.postgresql -> postgresql 42.2.2:
       force: true

【讨论】:

以上是关于使用 play framework v1.5 连接 db postgresql 时出错的主要内容,如果未能解决你的问题,请参考以下文章

我需要在 Play Framework 中管理数据库连接池,还是 Play 为我做这件事?

Play Framework 无法连接到 WS

Play Framework:“连接太多”数据库错误

如何在 Play Framework v2 中指定自定义数据库连接参数以进行测试?

Play Framework 1.3中如何通过application.conf和c3p0.properties配置连接池?

将 MySQL 连接器 Jar 链接到我的依赖项 Java Play Framework 1.x