我尝试使用C3P0连接池测试程序检查连接是否已连接到MySQL。如果密码正确,它可以工作。但密码可以更改,我需要让用户知道没有与MySQL的连接。
我想了解为什么buildSessionFactory()
无法启动连接测试程序。
我使用了Hibernate + 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的连接。但在这种情况下,由于某种原因没有调用测试器。我想了解它为什么会发生。
文档说明了这种情况。如果这是一个错误,应该启动测试人员,那么问题应该解决。
这就是我所说的。
答案 0 :(得分:1)
我不知道这是否有帮助但是我注意到你已经指定了参数IdleTestPeriod,而根据C3P0 manual它应该是idleConnectionTestPeriod。另请查看有关hibernate configuration的部分。所以根据手册:
如果这是一个大于0的数字, c3p0将测试所有空闲,汇集但是 未经检查的连接,每一个 秒数。
,默认值为0
- 因此,如果设置不正确,则不会调用测试仪。希望这会有所帮助。
答案 1 :(得分:0)
我遇到了同样的问题,在我的情况下,gradle错过了hibernate c3p0依赖项。将以下行添加到build.gradle中就可以了。
compile('org.hibernate:hibernate-c3p0:5.2.9.Final')