通信链接失败连接到Google Cloud SQL时,AppEngine中有时会发生错误

时间:2017-11-30 01:08:50

标签: mysql google-app-engine jpa google-cloud-endpoints google-cloud-sql

我从1年开始在谷歌App Engine中发布了一个后端项目,一切看起来都不错,1周前这个异常开始在Cloud SQL中执行JPA选择查询时有时(并不总是)抛出日志,有时查询是只是成功返回结果:

  

内部异常:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败

     

从服务器成功收到的最后一个数据包是309,979毫秒。成功发送到服务器的最后一个数据包是309,981毫秒之前   错误代码:0
  调用:SELECT ID,created_time,CURRENCY,IP,NAME FROM country_table   查询:ReadAllQuery(name =" Country.findAll" referenceClass = Country sql =" SELECT ID,created_time,CURRENCY,IP,NAME FROM country_table")

有时这个异常会停止执行一些查询:

  

从服务器成功收到的最后一个数据包是219,443毫秒。成功发送到服务器的最后一个数据包是219,446毫秒之前   at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)       at java.lang.reflect.Constructor.newInstance(Constructor.java:44)       在com.mysql.jdbc.Util.handleNewInstance(Util.java:411)       在com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)       在com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3851)       在com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2471)       在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)       在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2739)       在com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2149)       在com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2313)       在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:1007)       在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:642)       在org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)       在org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2002)       在org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570)       在org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:250)

1 个答案:

答案 0 :(得分:0)

这是因为MySQL关闭了连接。

JPA可能会自动重新连接到数据库。如果交易结果正确,您可以忽略此消息。

或者您可以延长计时器,直到连接在开发人员控制台上与interactive_timeoutwait_timeout关闭。这可以减少消息。