由于某些原因,我的hibernate应用程序的启动速度非常慢。(最多2分钟)
我一直认为c3p0配置是完全错误的(相关问题),但研究日志表明,在与服务器建立连接之后,没有任何活动。此外,使用Hibernate的内置轮询功能也会显示相同的结果
以下是日志中的一个片段:
20:06:51248调试基本资源工具:422-递减的挂起获取:0
20:06:51248调试基本资源池:1644-trace com.mchange.v2.resourcepool。[email protected][管理:3,未使用:2,排除:0](例如com.mchange.v2.c3p0.impl。[email protected])
20:06:51248调试基本资源池:1644-trace com.mchange.v2.resourcepool。[email protected][管理:3,未使用:2,排除:0](例如com.mchange.v2.c3p0.impl。[email protected])
20:06:51273调试JDBCServiceSiml:121-数据库->;
名称:PostgreSQL
版本:9.1.6
专业:9
小调:1
20:06:51274调试JDBCServiceSiml:127-驱动程序->;
名称:PostgreSQL本机驱动程序
版本:PostgreSQL 9.2 JDBC4(构建1002)
专业:9
小调:2
20:06:51274调试JdbcServicesImpl:133-JDBC版本:4.0在这条线上挂起2分钟#####
20:08:14727信息方言:123-HH000400:使用方言:org.hibernate.dialogue.PostgreSQLdialogue
20:08:14736信息LobCreatorBuilder:120-HH000424:禁用上下文LOB创建作为createClob()方法引发的错误:java.lang.reflect.InvocationTargetException
20:08:14736调试GoogoStatementCache:297-checkinAll():com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache统计--总大小:0;已签出:0;连接数:0;数字键:0
20:08:14736调试GoogoStatementCache:297-checkinAll():com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache统计--总大小:0;已签出:0;连接数:0;数字键:0
20:08:14883调试基本资源池:1644-trace com.mchange.v2.resourcepool。[email protected][管理:3,未使用:2,排除:0](例如com.mchange.v2.c3p0.impl。[email protected])
20:08:14883调试基本资源池:1644-trace com.mchange.v2.resourcepool。[email protected][管理:3,未使用:2,排除:0](例如com.mchange.v2.c3p0.impl。[email protected])
20:08:14883调试GoogoStatementCache:297-checkinAll():com.mchange.v2.c3p0.stmt.GlobalMaxOnlyStatementCache统计数据--总大小:0;已签出:0;连接数:0;数字键:0
(请注意评论。)
我还尝试了一个更老的Postgres JDBC驱动程序,但一点运气都没有
连接到本地数据库工作正常。连接立即建立,我可以查询数据库。这个远程数据库是一个Heroku开发实例。我也用另一个遥控器试过了。同样的结果
我不知道我现在可以检查什么来摆脱这种烦恼。任何帮助都将不胜感激
也许我的hibernate.cfg.xml有帮助:
http://www.hibernate.org/dtd/hibernate-
配置-3.0.dtd”>;
<;休眠配置>;
<;会话工厂>;
<;property name=“connection.driver\u class”>;org.postgresql.driver<;/property>;
<;property name=“connection.url”/>;
<;property name=“connection.default\u schema”/>;
<;property name=“connection.username”/>;
<;property name=“connection.password”/>;
<;property name=“dialent”>;org.hibernate.dialent.postgresqldatalent<;/property>;
<;property name=“cache.provider\u class”>;org.hibernate.cache.internal.NoCacheProvider<;/property>;
<;property name=“当前会话上下文类”>;线程<;/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\u test\u period”>;3000<;/property>;
<;property name=“hibernate.c3p0.acquisitionertydelay”>;500<;/property>;
<;property name=“show\u sql”>;true<;/property>;
<;property name=“format\u sql”>;false<;/property>;
<;property name=“hbm2ddl.auto”>;验证<;/property>;
<;mapping class=“core.entities.Exam”/>;
<;mapping class=“core.entities.examition”/>;
...
<;/session factory>;
<;/hibernate配置>;
编辑:我试图通过日志和分析来找出延迟的原因,但普遍都没有成功。(虽然我在这方面没有那么先进。)最后,我还是尝试了一下并失败,并更改了远程MySQL实例的数据库,以检查是否有任何差异。结果证明,连接几乎是立即建立的
请参阅Hibernate Slow以获取Postgres连接
hibernate.temp.use\u jdbc\u metadata\u defaults=false
避免在SessionFactory创建期间重新加载元数据