我的程序在打开时做的第一件事是尝试连接数据库,如果 c3p0 无法连接,它会卡住并且不会引发任何错误消息。
奇怪的是,使用 MySql 我得到了 java.net.UnknownHostException
,但是没有使用 SqlServer,它一直在尝试。
我想捕获错误并做一些事情。我尝试设置此属性,但没有成功。
<property name="hibernate.c3p0.timeout" value="60"/>
<property name="hibernate.c3p0.unreturnedConnectionTimeout" value="60"/>
我的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.lala.Something</class>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<!-- connection -->
<property name="javax.persistence.jdbc.url" value="jdbc:sqlserver://localhost\\\\SQLEXPRESS:1433;databaseName=str"/>
<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="javax.persistence.jdbc.user" value="teste"/>
<property name="javax.persistence.jdbc.password" value="teste"/>
<!-- hibernate -->
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.use_sql_comments" value="false"/>
<!-- c3p0 -->
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>
<property name="hibernate.c3p0.min_size" value="1"/>
</properties>
</persistence-unit>
</persistence>
最佳答案
我决定添加这两个属性:
acquireRetryAttempts
定义 c3p0 在放弃之前尝试从数据库中获取新连接的次数。如果此值小于或等于零,c3p0 将无限期地继续尝试获取连接。
breakAfterAcquireFailure
如果为 true,如果在进行 acquireRetryAttempts 后无法从数据库中获取连接,则合并的数据源将声明自己已损坏并永久关闭。如果为 false,则获取连接失败将导致所有等待池获取连接的线程抛出异常,但数据源将保持有效,并将在调用 getConnection() 后再次尝试获取。
<property name="hibernate.c3p0.acquireRetryAttempts" value="3"/>
<property name="hibernate.c3p0.breakAfterAcquireFailure" value="true"/>
关于java - c3p0 在无法到达主机时不会超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29084475/