我正在使用Hibernate和我的Web应用程序。
并使用了C3P0连接池机制。
我的配置如下所示,为了检查它是否正常工作,我将max_size和min_size设置为0.我认为理想情况下,如果它是0那么它不应该给我任何连接,应该抛出错误/异常。但它没有做这样的事情。它应该正常工作。
那么,我怎样才能确定给定的C3P0相关配置是否完美?
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/reg</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="connection.autocommit">false</property>
<!-- Connection pooling configuration -->
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">1</property> <!-- seconds -->
<property name="c3p0.max_size">0</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.min_size">0</property>
<property name="c3p0.timeout">200</property> <!-- seconds -->
<property name="hibernate.show_sql">false</property>
答案 0 :(得分:1)
这取决于您正在构建的应用程序。
使用数据库连接池的原因如下:
由于获取新连接的成本很高,因此应将min_size保持为非零。根据应用程序轻量级使用时的负载,您可以在这里使用一个很好的猜测。通常,在大多数示例中指定了5。
acquire_increment取决于使用您的应用的用户数量增加的速度。因此,想象一下,如果每次需要额外连接时都要求1个新连接,那么您的应用可能会表现不佳。因此,预测用户爆发时,您可能希望增加更大的块,例如5或10或更多。
通常,最多您拥有的数据库连接数可能小于使用您的应用程序的并发用户数。但是,如果您的应用程序数据库很重,那么您可能必须配置max_size以匹配您拥有的并发用户数。
即使将max_size配置为非常高,您也可能无法处理这么多用户。那时您将不得不考虑重新设计您的应用程序以避免加载数据库。这通常通过将读取操作卸载到仅用于读取操作的备用数据库实例来完成。此外,人们使用这种数据的缓存,这些数据不经常更改,但经常被读取。
类似的理由也适用于其他领域