由于某种原因,我的hibernate应用程序的启动非常缓慢。(最多2分钟)我一直在思考c3p0配置是完全错误,但是研究日志显示,在建立与服务器的连接之后,没有任何活动。同样,使用Hibernate的内置轮询功能可以显示相同的结果。
这是日志的摘录:
20:06:51,248 DEBUG BasicResourcePool:422 - decremented pending_acquires: 0 20:06:51,248 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2) 20:06:51,248 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2) 20:06:51,273 DEBUG JdbcServicesImpl:121 - Database -> name : PostgreSQL version : 9.1.6 major : 9 minor : 1 20:06:51,274 DEBUG JdbcServicesImpl:127 - Driver -> name : PostgreSQL Native Driver version : PostgreSQL 9.2 JDBC4 (build 1002) major : 9 minor : 2 20:06:51,274 DEBUG JdbcServicesImpl:133 - JDBC version : 4.0 ##### HANGS FOR 2 MINUTES ON THIS LINE ##### 20:08:14,727 INFO Dialect:123 - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect 20:08:14,736 INFO LobCreatorBuilder:120 - HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 20:08:14,736 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0 20:08:14,736 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0 20:08:14,883 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2) 20:08:14,883 DEBUG BasicResourcePool:1644 - trace com.mchange.v2.resourcepool.BasicResourcePool@1acaf0ed [managed: 3, unused: 2, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@5f873eb2) 20:08:14,883 DEBUG GooGooStatementCache:297 - checkinAll(): com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache stats -- total size: 0; checked out: 0; num connections: 0; num keys: 0
(请注意#comment#。)
我也尝试了较旧的Postgres JDBC驱动程序,但没有任何运气。
连接到本地数据库就可以了。立即建立连接,我可以查询数据库。这个远程数据库是一个Heroku开发实例。我也尝试了另一个遥控器。结果一样。
我没有想法,现在可以检查一下摆脱这种烦恼。任何帮助将非常感激。
也许我的hibernate.cfg.xml很有帮助:
http://www.hibernate.org/dtd/hibernate-
configuration-3.0.dtd"> <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">3</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.acquireRetryDelay">500</property> <property name="show_sql">true</property> <property name="format_sql">false</property> <property name="hbm2ddl.auto">validate</property> <mapping class="core.entities.Exam" /> <mapping class="core.entities.Examination" /> ... </session-factory> </hibernate-configuration>
编辑:我试图通过日志和配置文件查找延迟的原因,但是在此方面却很不成功。(尽管我在这方面没有那么先进。)最后,我确实尝试并失败了,并更改了远程MySQL实例的数据库,以检查是否发生任何差异。事实证明,连接几乎立即建立。
hibernate.temp.use_jdbc_metadata_defaults=false
为了避免在SessionFactory创建期间重新加载元数据。