我从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)
答案 0 :(得分:0)
这是因为MySQL关闭了连接。
JPA可能会自动重新连接到数据库。如果交易结果正确,您可以忽略此消息。
或者您可以延长计时器,直到连接在开发人员控制台上与interactive_timeout
和wait_timeout
关闭。这可以减少消息。