java - 如果Mysql端口被阻止,如何防止应用程序(使用hibernate + c3po)挂起?

标签 java mysql hibernate c3p0 database-testing

我一直在努力让我的 Java 应用程序数据库能够防故障,这样,如果数据库不可用,它们就不会出现意外的滞后。我已经成功处理了数据库完全关闭时的简单情况。

当我的机器的 mysql 端口被阻止并且我尝试访问它时,我陷入了困境。在这种情况下,应用程序永远挂起,没有c3po documentation中提到的超时配置。似乎可以预见地处理这个案子。在调试时,我可以看到它卡在 mysql 连接器中的 ReadAheadInputStream 类处。该类的文档表明它只会阻塞以满足读取请求。

到目前为止我已经使用了以下属性。

 <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 设置网络超时,默认情况下没有。初始连接使用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端口被阻止,如何防止应用程序(使用hibernate + c3po)挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569039/

相关文章:

java - Java 中的双括号初始化是什么?

java - 无法单击 "Search"按钮 Selenium Web 驱动程序 Java

java - 带分词器的扫描仪只能给出一行中的一个单词?

php - 给用户的条件评论/对话框

MySQL - 最后插入的 ID 的返回组

java - 尝试解析数组时出现空指针异常(java)

mysql - PHPMYADMIN 中的 SQL

java - 结点中的 hibernate 总标准

java - Spring hibernate @param 将映射到什么

java - 如果条件满足,Hibernate 执行 OneToMany