2016-11-03 33 views
0

私はBasicDataSourceインスタンスを持っており、jdbctemplateはそれを使用しています。接続プール上のMySql接続を復元できません。

だから、いくつかのアイドル時間の後に、それは常に言う:

Caused by: java.sql.SQLException: Could not retrieve transation read-only status server 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:949) 
     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939) 
     at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3976) 
     at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3947) 
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2295) 
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262) 
     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246) 
     at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 
     at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) 
     at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:916) 
     at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:909) 
     at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:644) 
     ... 39 more 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 30,457,725 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago. 
     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:526) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1127) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3715) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3604) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4155) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2832) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2781) 
     at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1569) 
     at com.mysql.jdbc.ConnectionImpl.isReadOnly(ConnectionImpl.java:3970) 
     ... 48 more 
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:3161) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3615) 
     ... 56 more 

そして、データソースのBean定義は次のとおりです。

<bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <property name="url" value="jdbc:mysql://1.2.3.4:3306/?autoReconnectForPools=true"/> 
    <property name="username" value="root"/> 
    <property name="password" value="password"/> 
    <property name="initialSize" value="${datasourceInitialPoolSize}"/> 
</bean> 

任意のアイデア?

+0

この値は奇妙な1.2.3.4:3306 こととhttp://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-faiをチェックしているようです – kuhajeyan

答えて

0

mysqlサーバが起動しているかどうかを確認してください。サーバーマシン上でmysqlクライアントである "mysql"を実行してみてください。サーバーが接続できない場合、接続しようとする頻度は関係ありません。

0

DB接続は永遠に持続しません。接続プールは通常、プールされた接続の有効性をテストすることを可能にします。 BasicDataSourceでは、testOnBorrow、testOnReturn、testWhileIdle、validationQueryTimeout、およびvalidationQueryのような関連するプロパティをいくつかサポートしています。

可能な限りプールからの接続が良好であることを確認したい場合は、testOnBorrowを使用してください。検証クエリは、少なくとも1つの行を返す限り、単純なものにすることができます。たとえば、「select 1」と入力します。