当前位置: 首页 > 面试题库 >

Hibernate启动非常慢

楚乐逸
2023-03-14
问题内容

由于某种原因,我的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创建期间重新加载元数据。



 类似资料:
  • 问题内容: 我的Maven依赖有什么问题。当我包含JPA时,我会列出pf例外 这是我的Maven依赖项 我的例外 和我的源代码 因此,我没有任何想法(不幸的是,没有示例)如何运行Spring boot和hibernate状态。 问题答案: 您是否为数据源设置了或?这是一个例子: 有关可以在何处放置配置文件以及如何配置应用程序以处理任何目录中的属性文件的说明,请参阅此链接以获取更多信息。

  • 我在Spring-MVC+JPA上有应用。我建立战争并尝试在Tomcat上开始。 DataConfig: app.properties为: 因此,tomcat日志中会出现错误消息:

  • 我是新的冬眠和Spring启动。我知道hibernate是ORM工具,这样你就可以将对象映射到数据库,只需使用保存()将obj自动保存到数据库中。在Spring Boot中,我会这样做 不知何故,我会得到所有的积垢操作,比如save和findAll等。 在hibernate的另一个教程中,它说需要会话来将对象保存到数据库。然而,我没有看到任何形式的会话工厂或会话在Spring Boot中实现,我仍

  • 已定义查询的Dao: 来自Hibernate调试日志的SQL: 当我在数据库上执行这个查询时,大约需要15ms,从代码上执行大约需要1.5秒。我在代码中注释掉了这一行,滞后消失了,所以问题肯定是这个jpql选择。 数据库连接配置: 更新1: debug.log:

  • org.springframework.boot.autoconfigure.web.servlet.error.errorMVCautoConfiguration需要一个类型为“org.springframework.boot.autoconfigure.web.servlet.dispatcherServletPath”的bean。 pom.xml: http://maven.apache.o

  • 问题内容: 我的程序: 我收到此错误:。语法绝对正确,我已经检查了一百万遍。怎么了? 问题答案: 您只能在类级别具有字段声明。这样的if语句必须位于方法,构造函数或初始化程序块中。 您可以消除这样的if语句: 但是我质疑为什么您根本不想在创建时设置此值,而不是响应某些用户操作。