java - MySQL : EOFException: Can not read response from server. 预计读取 4 个字节,在连接意外丢失之前读取了 0 个字节

标签 java mysql spring hibernate

我有一个带有 quartz 调度程序的 Spring 应用程序,用于批处理。过去 4 年一直运行良好。有一个批处理每 1 分钟运行一次。但从最近几天开始,当批处理尝试获取一些数据时,我们突然得到 org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Could not open connection

此批处理全天运行,但有时会出现此异常,并且所有其他批处理无法连接到 MySQL。因此,我们正在重新启动该应用程序,并且它工作正常。

数据源配置

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url">
            <value>${DATABASE_URL}</value>
        </property>
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="username">
            <value>${DATABASE_USER}</value>
        </property>
        <property name="password">
            <value>${DATABASE_PASSWORD}</value>
        </property>
</bean>

session 工厂连接池配置

<bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
<!-- Configurations specific to c3p0 connection pooling -->

<prop key="hibernate.c3p0.acquire_increment">5</prop>
<prop key="hibernate.c3p0.idle_test_period">1800</prop>
<prop key="hibernate.c3p0.max_size">600</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.timeout">1800</prop>
</props>
</property>
<property name="annotatedClasses">
<list> .... </list>
</property>
</bean>

最佳答案

可能是运行数据库服务器的 mysql 的问题。

更改数据库服务器中的 mysql 配置

在 mysql.cnf 的 [mysqld] 部分下添加绑定(bind)地址

bind-address=your_spring_application_ip

同时更改 mysql 用户的访问主机。 在 mysql 中运行以下查询

update mysql.user set host='%' where user='your_username';
flush privileges;

然后重启mysql服务

sudo systemctl restart mysql

关于java - MySQL : EOFException: Can not read response from server. 预计读取 4 个字节,在连接意外丢失之前读取了 0 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55689810/

相关文章:

java - 循环没有重置?

java - 如何将除了taskID之外的东西传递给Java线程

mysql - rails : changing database

java - 项目开始前的jbpm问题

java - 使用 Java 监视 tcpflow 输出?

java - 错误 : Could not create the Java Virtual Machine: Android Studio

mysql - Rails 3 - MySQL 客户端库版本不正确!为错误的客户端库版本编译的 Gem

php - 想要使用多个术语时查询中 LIKE 子句的顺序

java - 删除 'Allow' 响应 header

java - 如何在 Spring Boot 应用程序中将千分尺与 jmx 一起使用?