【问题标题】:getting java.io.EOFException when trying to insert data in mysql from spring mvc app尝试从spring mvc应用程序向mysql中插入数据时出现java.io.EOFException
【发布时间】:2011-09-19 11:53:01
【问题描述】:

我正在尝试将数据从 spring mvc 应用程序提交到 mysql 。有时我会收到以下错误

org.springframework.dao.DataAccessResourceFailureException: StatementCallback; SQL [insert into networkwithusdb(company,firstname,lastname,email,address1,address2,city,state,zipcode,currentemployer,currentjobtitle,primarycareerarea,secondarycareerarea) values('HCA North Texas','dd','af','bhanukiran@imomentous.info','','','','KS','','','','Facilities','Facilities')]; Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException

STACKTRACE:

java.io.EOFException
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3243)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343)
    at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260)
    at org.apache.commons.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
    at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:508)
    at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:1)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:518)
    at com.imomentous.hcanorthtexas.service.DatabaseService.insertNetworkData(DatabaseService.java:58)
    at com.imomentous.hcanorthtexas.controller.NetworkWithUsController.processNetworkWithUSForm(NetworkWithUsController.java:62)
    [... snip ...]    

** END NESTED EXCEPTION **

只有几次我得到这个异常。

以下是我的配置文件:

<bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close">
    <property name="driverClassName">
        <value>${database.driver}</value>
    </property>
    <property name="url">
        <value>${database.url}</value>
    </property>
    <property name="username">
        <value>${database.username}</value>
    </property>
    <property name="password">
        <value>${database.password}</value>
    </property>
    <property name="maxActive" value="5" />
    <property name="initialSize" value="3" />
    <property name="validationQuery" value="SELECT 5 FROM DUAL" />
    <property name="testOnBorrow" value="true" />

</bean>

我使用的属性为:

database.driver =com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/XXXmobiledb
database.username=XXXX
database.password=XXXX

我正在使用:mysql-connector-java-5.0.5.jar mysql服务器5。

有时数据库连接工作正常,我得到了结果。

但有时它会产生错误。 可能是什么问题?如果有任何想法请告诉..谢谢

【问题讨论】:

    标签: mysql spring spring-mvc jdbc mysql-error-1064


    【解决方案1】:

    事实上,MySQL 会在给定时间后断开打开的套接字。建议使用连接池(如c3p0)。

    在 MySQL 论坛上查看此帖子 - http://forums.mysql.com/read.php?39,143312,180718#msg-180718。这应该会为您解决。

    【讨论】:

      【解决方案2】:

      长时间不活动后可能会发生这种情况,将验证查询添加到您的数据源 bean:

      <property name="validationQuery">
      <value>Select 1</value>
      </property>
      

      【讨论】:

        【解决方案3】:

        为避免MySQL 在给定空闲时间后断开会话,您可以使用 Spring OpenSessionInViewFilterInterceptor 来处理会话。

        这将需要在您的web.xml 文件中设置额外的会话过滤器设置。你可以模仿 this post

        【讨论】:

          猜你喜欢
          • 2020-10-03
          • 2012-12-18
          • 2016-05-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-02
          • 2016-08-18
          相关资源
          最近更新 更多