1

我尝试使用 C3P0 连接池测试器检查连接到 MySQL 是否正常。如果密码正确,它可以工作。但是密码可以更改,我需要让用户知道没有与 MySQL 的连接。

我想了解为什么buildSessionFactory()不启动连接测试仪。

我使用了休眠+C3P0。

这是我的配置:

setProperty("hibernate.connection.driver_class",
"com.mysql.jdbc.Driver");
setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
setProperty("hibernate.connection.url", "jdbc:mysql://localhost:"
+ getDBPort() + "/emplatcore");
setProperty("hibernate.connection.username", Network.getInstance()
.getMASDBAccountCred().getUserName());
setProperty("hibernate.connection.password", Network.getInstance()
.getMASDBAccountCred().getPassword());

setProperty("hibernate.show_sql", "false");

setProperty("hibernate.c3p0.aquire_increment",
Integer.toString(getConnectionAcquireIncrement()));
setProperty("hibernate.c3p0.idle_test_period",
Integer.toString(getIdleTestPeriod()));
setProperty("hibernate.c3p0.timeout",
Integer.toString(getIdleTimeout()));
setProperty("hibernate.c3p0.max_size",
Integer.toString(getMaxConnections()));
setProperty("hibernate.c3p0.max_statements",
Integer.toString(getStatementCache()));
setProperty("hibernate.c3p0.min_size",
Integer.toString(getInitialPoolSize()));
setProperty(
"c3p0.connectionTesterClassName",
"com.nortelnetworks.mcp.ne.mediaserver.db.dao.hibernate.c3p0.MCPHibernateConnectionTester");
setProperty("c3p0.acquireRetryAttempts",
Integer.toString(getAcquireRetryAttempts()));
setProperty("c3p0.acquireRetryDelay",
Long.toString(getAcquireRetryDelay()));

设置:

<parm name="ConnectionAcquireIncrement" default="2" />
<parm name="IdleTestPeriod" default="30"/>
<parm name="IdleTimeOut" default="0" />
<parm name="MaxConnections" default="10"/>
<parm name="StatementCache" default="5" />
<parm name="InitialPoolSize" default="2" />
<parm default="5" name="AcquireRetryAttempts" />
<parm default="5000" name="AcquireRetryDelay" />
<parm default="3306" name="Port" />

我的代码中也不例外。我想说的是,由于某种原因 MySQL DB 已关闭,然后buildSessionFactory()并没有失败。正如我在论坛上读到的,这是正确的情况。但是我创建了一个 C3P0 连接测试器,它应该在每次超时时运行以检查连接状态,并让我知道与 DB 的连接是否已建立。但是在这种情况下,由于某种原因没有调用测试仪。我想了解它为什么会发生。

文档没有说明这种情况。如果这是一个错误并且应该启动测试仪,那么应该修复该问题。

这就是我所说的。

4

2 回答 2

1

我不知道这是否有帮助,但我注意到您已经指定了参数 IdleTestPeriod,而根据C3P0 手册,它应该是 idleConnectionTestPeriod。还要检查有关休眠配置的部分。所以根据手册:

如果这是一个大于 0 的数字,c3p0 将每隔这个秒数测试所有空闲的、池化但未签出的连接。

默认值为0- 所以如果设置不正确,将不会调用测试器。希望这可以帮助。

于 2011-02-17T09:25:39.367 回答
0

我遇到了同样的问题,在我的情况下,gradle 缺少 hibernate c3p0 依赖项。将以下行添加到 build.gradle 就可以了。

compile('org.hibernate:hibernate-c3p0:5.2.9.Final')
于 2017-07-03T06:06:48.100 回答