2016-01-21 61 views
0

我的Play應用可以連接到MySQL服務器。如何使Play 2 Scala與遠程PostgreSQL數據庫服務器一起工作?

爲什麼不能連接到PostgreSQL服務器?

在項目目錄...

// build.sbt file... 

name := "scalaplay1" 

version := "1.0" 

lazy val `scalaplay1` = (project in file(".")).enablePlugins(PlayScala) 

scalaVersion := "2.11.7" 

libraryDependencies ++= Seq(jdbc , cache , ws , specs2 % Test, 
    "mysql" % "mysql-connector-java" % "5.1.38"  // This works 
    // "postgresql" % "postgresql" % "9.1-901.jdbc4" // This does not 
) 

unmanagedResourceDirectories in Test <+= baseDirectory (_ /"target/web/public/test") 

resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases" 

配置文件...

// conf/application.conf file... 

db.default.driver=com.mysql.jdbc.Driver // This works 
db.default.url="jdbc:mysql://<my_server>:<port_number>/<db_name>" 

#db.default.driver=org.postgresql.Driver // This fails (line 48) 
#db.default.url="jdbc:postgresql://<my_server>:<port_number>/<db_name>" 

db.default.username="username" 
db.default.password= "password" 

這裏是玩就怎麼失敗(瀏覽器)...

Configuration error 

Cannot connect to database [default] 

In /C:/Users/User/IdeaProjects/project/target/scala-2.11/classes/application.conf:48 

47. db.default.driver=org.postgresql.Driver // This fails (line 48) 
48. db.default.url="jdbc:postgresql://<my_server>:<port_number>/<db_name>" 

這裏是Play如何失敗(在終端中)...

--- (Running the application, auto-reloading is enabled) --- 

[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 

Server started, use Alt+D to stop 

[success] Compiled in 567ms 
[warn] application - Logger configuration in conf files is deprecated and has no effect. Use a logback configuration file instead. 
[info] application - Creating Pool for datasource 'default' 
[error] application - 

! @6oombhen4 - Internal server error, for (GET) [/] -> 

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]] 
    at play.api.Configuration$.configError(Configuration.scala:178) ~[play_2.11-2.4.6.jar:2.4.6] 
    at play.api.Configuration.reportError(Configuration.scala:829) ~[play_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:48) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:42) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at scala.collection.immutable.List.foreach(List.scala:381) ~[scala-library-2.11.7.jar:na] 
    at play.api.db.DefaultDBApi.connect(DefaultDBApi.scala:42) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DBApiProvider.get$lzycompute(DBModule.scala:72) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DBApiProvider.get(DBModule.scala:62) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DBApiProvider.get(DBModule.scala:58) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) ~[guice-4.0.jar:na] 
Caused by: play.api.Configuration$$anon$1: Configuration error[Exception during pool initialization] 
    at play.api.Configuration$.configError(Configuration.scala:178) ~[play_2.11-2.4.6.jar:2.4.6] 
    at play.api.PlayConfig.reportError(Configuration.scala:1048) ~[play_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:69) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.PooledDatabase.createDataSource(Databases.scala:199) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:124) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDatabase.dataSource(Databases.scala:122) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDatabase.getConnection(Databases.scala:143) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDatabase.getConnection(Databases.scala:139) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:44) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:42) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
Caused by: com.zaxxer.hikari.pool.PoolInitializationException: Exception during pool initialization 
    at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:542) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:171) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80) ~[HikariCP-2.3.7.jar:na] 
    at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:58) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at scala.util.Try$.apply(Try.scala:192) ~[scala-library-2.11.7.jar:na] 
    at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.PooledDatabase.createDataSource(Databases.scala:199) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
Caused by: java.sql.SQLException: JDBC4 Connection.isValid() method not supported, connection test query must be configured 
    at com.zaxxer.hikari.pool.BaseHikariPool.addConnection(BaseHikariPool.java:441) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.BaseHikariPool.initializeConnections(BaseHikariPool.java:540) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.BaseHikariPool.<init>(BaseHikariPool.java:171) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:60) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:48) ~[HikariCP-2.3.7.jar:na] 
    at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:80) ~[HikariCP-2.3.7.jar:na] 
    at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:58) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 
    at scala.util.Try$.apply(Try.scala:192) ~[scala-library-2.11.7.jar:na] 
    at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54) ~[play-jdbc_2.11-2.4.6.jar:2.4.6] 

^請注意,我仔細檢查了端口是否打開,我是否正確地複製粘貼了端點名稱,端口號是否正確以及數據庫名稱是否正確。我使用Amazon RDS服務創建了Postgres實例,並且我100%確定這四件事情是正確的。

什麼問題(或者至少你能縮小到什麼程度)?


解決方法:添加這application.conf ...

#specify a connectionTestQuery. Only do this if upgrading the JDBC-Driver does not help 
db.default.hikaricp.connectionTestQuery="SELECT TRUE" 

或升級到最新的驅動程序(不知道該怎麼做內SBT)

+0

你的app和db是否在同一個安全組中? –

回答

0

如果你讀stacktrace的底部(和Play的Migration Guide),你應該嘗試添加一個connectionTestQuery,例如

db.default.connectionTestQuery = "select 1" 
+0

它工作。另外,我是一名初學者,我所知道的是如何從Google複製粘貼配置,並且我似乎無法找到最新的Post.sql build.sbt驅動程序。我不想從Google手動抓取jar文件。 –

+0

@MichaelLafayette你可以在這裏選擇一個更新的驅動程序版本:http://mvnrepository.com/artifact/org.postgresql/postgresql。此外,這是HikariCP的一個「bug」,並且已經修復:https://github.com/brettwooldridge/HikariCP/issues/225。 – marcospereira

+0

SBT找不到以「-jdbc4」結尾的內容。就像我可以將「9.1-901.jdbc4」替換爲「9.2-1003-jdbc4」一樣,並且我得到了未解決的依賴關係。我想我會堅持使用舊的驅動程序,以確保所有的數據庫都能正常工作。 –

0

Thnaks man。我在application.conf中添加了這些命令db.default.hikaricp.connectionTestQuery =「SELECT TRUE」並且正常工作。

相關問題