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

初始化C3P0连接池需要2分钟

丁毅庵
2023-03-14
问题内容

我无法确定为什么在我的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文件中设置。

测试中的第一个事务为openend时,池将初始化。之后,连接和查询数据库就可以正常工作,它在开始之前仅在以下行上挂起一会儿。我对输出进行了格式化,因为我认为问题可能出在这里提到的一种设置。:

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分钟。)

Edit2:这是连接过程的日志。


问题答案:

在会话工厂的配置中,将属性Hibernate.temp.use_jdbc_metadata_defaults设置为false。这将指示Hibernate使用元数据方言而不是连接,这将导致启动缓慢。您还必须为驱动程序配置适当的方言。



 类似资料:
  • 问题内容: 我正在尝试为我的Web应用程序配置HikariCP。我没有使用任何框架,它是一个简单的简单Java Web应用程序。当我尝试通过普通的JDBC建立连接时,它成功了,并且能够执行所有数据库操作。 但是,当我尝试与连接池建立连接时,初始化后却收到了一个我不知道的异常。 下面是我正在使用的配置,我正在上下文侦听器中对其进行初始化。我在Java 1.7上运行,带有使用HikariCP Java

  • 问题内容: 我在玩图书馆。我想从PostgreSQL数据库中检索数据。我得到的错误对我来说很奇怪。即使我手动配置CP: 我仍然看到错误。这是我的DAO: 该应用程序: 我的档案 错误: 我错过了什么? 问题答案: 要加载,应提前调用scalikejdbc-config 。 http://scalikejdbc.org/documentation/configuration.html#scalike

  • 我使用postgresql+hibernate+c3p0进行池管理。 我可以看到,对于每个数据库查询,c3p0都在初始化,按照我的理解,这应该发生一次,而不是每个查询,否则有连接池有什么意义。如果我错了请改正。 相关信息:

  • 我的项目的设置是- 用于持久化的Spring JDBC 下面是我的应用程序的日志,它捕获了与数据库的交互。 日志中有两件事是清楚的- 连接池仅在收到执行查询的第一个请求时才开始创建连接 一个包含4个连接的池需要将近30秒的时间来初始化 我的问题是- 如何配置DBCP在启动时自动初始化? 创建连接真的需要那么长时间吗? 注意:请不要建议切换到C3P0或Tomcat连接池。我知道这些解决方案。我更感兴

  • 本文向大家介绍Angular 2 初始化,包括了Angular 2 初始化的使用技巧和注意事项,需要的朋友参考一下 示例 组件或指令属性已初始化时触发。 (在子指令之前)            

  • 问题内容: 要指定SQLite连接属性,请使用org.sqlite.SQLiteConfig,它的内容如下: 使用c3p0创建连接池的过程如下: 问题:如何创建结合了两者的数据源,让我设置诸如连接池的最大池大小和sqlite的同步模式之类的东西? 问题答案: 尝试 现在,数据源将是c3p0 PooledDataSource,它包装了已根据需要配置的SQLite未池化数据源。 请参阅C3P0的文档,