2012-03-02 2 views
3

все. меня сталкиваются с проблемой в течение нескольких дней, это информация о детали стека:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи связи. Программное обеспечение вызвало прерывание соединения: recv failed

org.springframework.dao.RecoverableDataAccessException: 
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 18,940 milliseconds ago. The last packet sent successfully to the server was 18,918 milliseconds ago. 
### The error may involve com.tuan800.searchtask.model.dao.mybatis.RelationDao.updateSuggest-Inline 
### The error occurred while setting parameters 
### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 18,940 milliseconds ago. The last packet sent successfully to the server was 18,918 milliseconds ago. 
; SQL []; Communications link failure 

The last packet successfully received from the server was 18,940 milliseconds ago. The last packet sent successfully to the server was 18,918 milliseconds ago.; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 18,940 milliseconds ago. The last packet sent successfully to the server was 18,918 milliseconds ago. 
    at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:98) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) 
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) 
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:71) 
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:346) 
    at $Proxy10.update(Unknown Source) 
    at org.mybatis.spring.SqlSessionTemplate.update(SqlSessionTemplate.java:245) 
    at com.tuan800.searchtask.model.dao.mybatis.impl.RelationDaoImpl.updateSuggest(RelationDaoImpl.java:24) 
    at com.tuan800.searchtask.service.impl.RelationServiceImpl.modifyRelationCount(RelationServiceImpl.java:64) 
    at com.tuan800.searchtask.RelationIndexTask.main(RelationIndexTask.java:33) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 18,940 milliseconds ago. The last packet sent successfully to the server was 18,918 milliseconds ago. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    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:409) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1118) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3055) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2941) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3489) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113) 
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364) 
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:989) 
    at sun.reflect.GeneratedMethodAccessor163.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:45) 
    at $Proxy20.execute(Unknown Source) 
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:22) 
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:51) 
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:29) 
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:88) 
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:121) 
    at sun.reflect.GeneratedMethodAccessor165.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:338) 
    ... 10 more 
Caused by: java.net.SocketException: Software caused connection abort: recv failed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:129) 
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114) 
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161) 
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189) 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2499) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2952) 
    ... 32 more 

Я хочу, чтобы обновить запись в MySQL с помощью mybatis и весной, и я обновлю его один за другим, ниже mybatis конфигурации: предложения обновления установить счетчик = # {COUNT}, версия = # {версия}, FREQ = # {частота}, где ID = # {ID}

И код услуги:

for(RelationBvo relation : list){ 

     Long totalCount = solrDealService.queryResult(relation.getWord(),null,null,0); 

     relation.setCount(totalCount.intValue()); 

     if(relation.getFreq() == 0){ 
      relation.setFreq(1); 
     } 

     ***relationDao.updateSuggest(relation);//update record*** 

     executedCount++; 

     logger.info("Program have executed "+executedCount+" records."); 
} 

может любой желающий высокоэнергетический лазер Большое спасибо.

+0

Похоже, сервер MySQL перестает отвечать. Всегда ли это происходит в одном месте? Что говорят журналы сервера MySQL? Есть сообщения об ошибках? –

+1

Джим Гаррисон, я установил его, добавив useCompression = true, когда соединение установлено. Большое спасибо. – Leo

ответ

3

Ваши подключения mySQL синхронизируются до того, как ваш пул соединений узнает их. Есть несколько способов, чтобы исправить это:

  1. Увеличьте значение тайм-аута в конфигурационном файле MySQL (my.ini)
  2. Сокращение времени простоя в вашем пуле соединений, так что она будет отбрасывать соединение до MySQL будет закрыть it
  3. Добавьте запрос проверки соединения в конфигурацию вашего пула, чтобы пул тестировал каждое соединение, прежде чем оно его вам предоставит, но это может привести к серьезному замедлению работы системы.
Смежные вопросы