2014-01-27 35 views
0

我無法維護與我的ClearDB實例的連接。當我的應用第一次運行時,我可以向訪問數據庫的請求發送請求。一兩分鐘後,如果我提出相同的請求,我會收到通信鏈接失敗。這裏是我的應用程序的詳細信息:通信鏈路故障; Sprint.io在Heroku上使用ClearDB附加組件

  • 斯卡拉使用Spray.io
  • 油滑的DB互動
  • ClearDB:點燃而測試這個新的應用程序
  • DataSource類:com.mchange.v2.c3p0 .ComboPooledDataSource

如果我在我的本地MySQL實例本地運行我的應用程序,我無法重現該問題。如果我將我的數據庫URL更改爲指向我的ClearDB實例,那麼我可以在本地重新創建它。當然似乎是一個ClearDB問題...

我接觸ClearDB支持,他們告訴我,他們不能幫助我,因爲他們不直接支持Spray.io,我應該嘗試直接從Heroku的獲得幫助。我向Heroku發送了一個幫助請求,但是由於我不認爲Spray.io或Slick在那裏直接支持,所以沒有多少期待。我一直在淘金Stackoverflow以及沒有運氣,所以我現在發佈這個。

下面是我在本地複製時獲得的完整堆棧跟蹤。

java.lang.x:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 185,507 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago. 
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 185,507 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)[WARN] [01/26/2014 20:48:42.906] [LottoREST-akka.actor.default-dispatcher-4] [akka://LottoREST/user/lotto-service] Request HttpRequest(GET,http://localhost:8080/drawing,List(Cookie: JSESSIONID=4EFAE21258F8AF891C010DD14F9BC3F1, Accept-Language: en-US, en, Accept-Encoding: gzip, deflate, sdch, User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36, Cache-Control: max-age=0, Connection: keep-alive, Host: localhost:8080),Empty,HTTP/1.1) could not be handled normally 

    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1121) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3720) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3609) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4160) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156) 
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:989) 
    at scala.slick.jdbc.StatementInvoker.results(StatementInvoker.scala:34) 
    at scala.slick.jdbc.StatementInvoker.elementsTo(StatementInvoker.scala:17) 
    at scala.slick.jdbc.Invoker$class.foreach(Invoker.scala:90) 
    at scala.slick.jdbc.StatementInvoker.foreach(StatementInvoker.scala:10) 
    at scala.slick.jdbc.Invoker$class.build(Invoker.scala:66) 
    at scala.slick.jdbc.StatementInvoker.build(StatementInvoker.scala:10) 
    at scala.slick.jdbc.Invoker$class.list(Invoker.scala:56) 
    at scala.slick.jdbc.StatementInvoker.list(StatementInvoker.scala:10) 
    at scala.slick.jdbc.UnitInvoker$class.list(Invoker.scala:150) 
    at scala.slick.driver.BasicInvokerComponent$QueryInvoker.list(BasicInvokerComponent.scala:19) 
    at com.megalottopools.model.DrawingComponent$Drawings$.findAllDrawings(Drawing.scala:28) 
    at com.megalottopools.model.Model.getDrawings(Model.scala:20) 
    at com.megalottopools.api.DrawingService$$anonfun$1.apply(DrawingService.scala:27) 
    at com.megalottopools.api.DrawingService$$anonfun$1.apply(DrawingService.scala:25) 
    at spray.routing.directives.BasicDirectives$$anonfun$mapRequestContext$1$$anonfun$apply$1.apply(BasicDirectives.scala:30) 
    at spray.routing.directives.BasicDirectives$$anonfun$mapRequestContext$1$$anonfun$apply$1.apply(BasicDirectives.scala:30) 
    at spray.routing.directives.BasicDirectives$$anon$3$$anonfun$happly$1.apply(BasicDirectives.scala:92) 
    at spray.routing.directives.BasicDirectives$$anon$3$$anonfun$happly$1.apply(BasicDirectives.scala:92) 
    at spray.routing.RouteConcatenation$RouteConcatenation$$anonfun$$tilde$1.apply(RouteConcatenation.scala:30) 
    at spray.routing.RouteConcatenation$RouteConcatenation$$anonfun$$tilde$1.apply(RouteConcatenation.scala:29) 
    at spray.routing.directives.BasicDirectives$$anonfun$mapRequestContext$1$$anonfun$apply$1.apply(BasicDirectives.scala:30) 
    at spray.routing.directives.BasicDirectives$$anonfun$mapRequestContext$1$$anonfun$apply$1.apply(BasicDirectives.scala:30) 
    at spray.routing.directives.BasicDirectives$$anon$3$$anonfun$happly$1.apply(BasicDirectives.scala:92) 
    at spray.routing.directives.BasicDirectives$$anon$3$$anonfun$happly$1.apply(BasicDirectives.scala:92) 
    at spray.routing.RouteConcatenation$RouteConcatenation$$anonfun$$tilde$1.apply(RouteConcatenation.scala:30) 
    at spray.routing.RouteConcatenation$RouteConcatenation$$anonfun$$tilde$1.apply(RouteConcatenation.scala:29) 
    at spray.routing.RouteConcatenation$RouteConcatenation$$anonfun$$tilde$1.apply(RouteConcatenation.scala:30) 
    at spray.routing.RouteConcatenation$RouteConcatenation$$anonfun$$tilde$1.apply(RouteConcatenation.scala:29) 
    at spray.routing.directives.BasicDirectives$$anonfun$mapRequestContext$1$$anonfun$apply$1.apply(BasicDirectives.scala:30) 
    at spray.routing.directives.BasicDirectives$$anonfun$mapRequestContext$1$$anonfun$apply$1.apply(BasicDirectives.scala:30) 
    at spray.routing.directives.ExecutionDirectives$$anonfun$handleExceptions$1$$anonfun$apply$4.apply(ExecutionDirectives.scala:35) 
    at spray.routing.directives.ExecutionDirectives$$anonfun$handleExceptions$1$$anonfun$apply$4.apply(ExecutionDirectives.scala:33) 
    at spray.routing.HttpServiceBase$class.runSealedRoute$1(HttpService.scala:36) 
    at spray.routing.HttpServiceBase$$anonfun$runRoute$1.applyOrElse(HttpService.scala:46) 
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425) 
    at akka.actor.ActorCell.invoke(ActorCell.scala:386) 
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230) 
    at akka.dispatch.Mailbox.run(Mailbox.scala:212) 
    at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506) 
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3166) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3620) 
    ... 51 more 

回答

0

聽起來像是連接超時問題。檢查c3p0是否可以正常連接到ClearDB活動。某些數據庫連接池使用網絡ping或運行簡單的選擇語句(如SELECT 1)來保持連接處於活動狀態。您可以查看哪些配置選項可用於您的數據庫。爲了驗證這是一個問題,每隔幾秒鐘運行一些啞數據庫操作,並查看一段時間後是否會得到相同的錯誤(保持池大小== 1)。

+0

我有「首選測試查詢」設置爲「選擇1」,但我不知道如何知道c3p0是否實際使用該選項。我會看看我是否可以每隔60秒鐘定期撥打數據庫以查看是否有效。似乎我不應該這樣做,但。我沒有訪問數據庫配置選項。我確實聯繫過ClearDB支持,他們檢查了我的所有選項都設置正確......無論如何。 – ShatyUT

相關問題