我无法理解为什么在我的Hibernate应用程序中,初始化c3p0连接池需要2分钟。
这是我的Hibernate.cfg.xml文件:
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="connection.url"/>
<property name="connection.default_schema"/>
<property name="connection.username"/>
<property name="connection.password"/>
<property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.timeout">300</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0."></property>
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<property name="hbm2ddl.auto">create</property>
</session-factory>
</hibernate-configuration>
在构建会话工厂时,我的HibernateUtil文件中设置了连接设置。
当我的测试中打开第一个事务时,池被初始化。连接和查询数据库之后都能工作得很好,只是在启动后面的行之前会稍微停顿一下。我对输出进行了格式化,因为我认为问题可能出现在这里提到的某个设置上。
INFO: Initializing c3p0 pool...
com.mchange.v2.c3p0.PoolBackedDataSource@30670080 [
connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@ecfec4d0 [
acquireIncrement -> 1,
acquireRetryAttempts -> 30,
acquireRetryDelay -> 1000,
autoCommitOnClose -> false,
automaticTestTable -> null,
breakAfterAcquireFailure -> false,
checkoutTimeout -> 0,
connectionCustomizerClassName -> null,
connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester,
debugUnreturnedConnectionStackTraces -> false,
factoryClassLocation -> null,
forceIgnoreUnresolvedTransactions -> false,
identityToken -> I-REMOVED-THIS,
idleConnectionTestPeriod -> 3000,
initialPoolSize -> 3,
maxAdministrativeTaskTime -> 0,
maxConnectionAge -> 0,
maxIdleTime -> 300,
maxIdleTimeExcessConnections -> 0,
maxPoolSize -> 10,
maxStatements -> 50,
maxStatementsPerConnection -> 0,
minPoolSize -> 3,
nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@b17e5c65 [
description -> null,
driverClass -> null,
factoryClassLocation -> null,
identityToken -> I-REMOVED-THIS,
jdbcUrl -> jdbc:postgresql://URL-TO-MY_DB,
properties -> {user=******, password=******, default_schema=}
],
preferredTestQuery -> null,
propertyCycle -> 0,
testConnectionOnCheckin -> false,
testConnectionOnCheckout -> false,
unreturnedConnectionTimeout -> 0,
usesTraditionalReflectiveProxies -> false;
userOverrides: {}
],
dataSourceName -> null,
factoryClassLocation -> null,
identityToken -> I-REMOVED-THIS,
numHelperThreads -> 3
]
这是我第一次使用Hibernate和c3p0,当启动连接池时,我期望它会快得多。这是我的错觉吗?
无论是使用远程数据库还是本地PostgreSQL实例都没有区别。
(编辑:这不是正确的。我在比较本地和远程数据库服务器时犯了一个错误。在本地,初始化几乎是立即完成的,在远程情况下需要大约2分钟。)
编辑2:这里是连接过程的日志。