如果 Mysql 端口被阻塞,如何防止应用程序(使用 hibernate + c3po)挂起?
How to prevent application (using hibernate + c3po) from hanging if Mysql port is blocked?
我一直在尝试使我的 Java 应用程序数据库失败证明,以便在数据库不可用时不会出现意外延迟。当数据库完全关闭时,我已经成功地处理了简单的情况。
我遇到了 mysql 端口被我的机器阻塞的情况,我尝试访问它。在这种情况下,应用程序永远挂起,c3po documentation 中提到的超时配置似乎无法预测地处理这种情况。在调试时,我可以看到它挂在 mysql 连接器中的 ReadAheadInputStream class 处。此 class 的文档显示它只会阻塞以满足读取请求。
到目前为止,我使用了以下属性。
<property name="hibernate.c3p0.validate" value="true"/>
<property name="hibernate.c3p0.checkoutTimeout" value="5"/>
<property name="hibernate.c3p0.preferredTestQuery" value="SELECT 1"/>
除此之外,配置连接池的其他属性如文档中所述
版本:
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.12.Final</version>
</dependency>
有人可以指导我吗?除了 c3po 文档中提到的超时参数之外,是否还有任何其他超时参数也需要配置?
您可能需要为 MySQL 设置网络超时,默认情况下有 none。将 connectTimeout 用于初始连接,将 socketTimeout 用于后续网络操作。例如:
jdbc:mysql://dbhost:3306/dbname?connectTimeout=1000&socketTimeout=200000
两者都以毫秒为单位。参见 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html。
我一直在尝试使我的 Java 应用程序数据库失败证明,以便在数据库不可用时不会出现意外延迟。当数据库完全关闭时,我已经成功地处理了简单的情况。
我遇到了 mysql 端口被我的机器阻塞的情况,我尝试访问它。在这种情况下,应用程序永远挂起,c3po documentation 中提到的超时配置似乎无法预测地处理这种情况。在调试时,我可以看到它挂在 mysql 连接器中的 ReadAheadInputStream class 处。此 class 的文档显示它只会阻塞以满足读取请求。
到目前为止,我使用了以下属性。
<property name="hibernate.c3p0.validate" value="true"/>
<property name="hibernate.c3p0.checkoutTimeout" value="5"/>
<property name="hibernate.c3p0.preferredTestQuery" value="SELECT 1"/>
除此之外,配置连接池的其他属性如文档中所述
版本:
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.12.Final</version>
</dependency>
有人可以指导我吗?除了 c3po 文档中提到的超时参数之外,是否还有任何其他超时参数也需要配置?
您可能需要为 MySQL 设置网络超时,默认情况下有 none。将 connectTimeout 用于初始连接,将 socketTimeout 用于后续网络操作。例如:
jdbc:mysql://dbhost:3306/dbname?connectTimeout=1000&socketTimeout=200000
两者都以毫秒为单位。参见 https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html。