如果配置了 c3p0,connection.pool_size 会被忽略吗

if c3p0 is configured, will connection.pool_size be ignored

我将休眠与 c3p0 一起用于连接管理。在我的休眠配置中,我同时配置了 connection.pool_sizehibernate.c3p0.max_size(使用不同的数字)。

据我所知,当我使用 c3p0 时,我的默认休眠连接管理将不会被使用。 但我不确定 hibernate.c3p0.max_size 是否是默认休眠池大小设置变量 connection.pool_size 的 c3p0 替换。

所以,我的问题是 - 我可以从配置中删除 connection.pool_size 吗? 如果我的配置文件中都有,connection.pool_size 会被完全忽略还是会被用于任何其他目的?

使用会话工厂为 c3po 定义配置后。 不需要休眠默认设置。您应该将其删除以避免混淆。

您的会话工厂配置如下所示:

   <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
  <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:ABCXYZ</property>
  <property name="hibernate.connection.username">myuser</property>
  <property name="hibernate.connection.password">password</property>
  <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
  <property name="hibernate.default_schema">SCHEMA_A</property>
  <property name="show_sql">true</property>

  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.max_size">20</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>

  <mapping class="com.ABCXYZ.user.DBUser"></mapping>
</session-factory>
</hibernate-configuration>

最好删除 connection.pool_size 以使配置设置清晰易懂。

您实际上应该从您的配置中删除 hibernate.connection.pool_size,因为它已经被 cp30 的特定设置所取代 - 请参阅文档

Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is not intended for use in a production system or even for performance testing. You should use a third party pool for best performance and stability. Just replace the hibernate.connection.pool_size property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might >like to use C3P0.

参考 - https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/configuration-hibernatejdbc.html

更新

我了解到 Hikari CP 提供了比 C3P0 和其他数据库连接池工具更好的性能,并且 spring 引导原生支持 Hikari,因此您可以使用默认设置。但是,如果您想要调整默认值以满足您的特定用例,您可以这样做。

https://github.com/brettwooldridge/HikariCP

有关如何在 application.properties 中配置 Hikari 参数,请查看:https://gist.github.com/rhamedy/b3cb936061cc03acdfe21358b86a5bc6