我对连接池库一点也不熟悉。我刚刚通过这篇博客文章发现了它),我不确定是否应该在基于 grails/hibernate/mysql 的 Web 应用程序中使用它。
所以我的问题很简单:您建议在哪些情况下将连接池库集成到 grails 应用程序中?总是,从不或仅超过某些连接阈值?
PS:如果您曾经在您的 Web 应用程序中成功使用过 C3P0,我将非常感谢您的反馈(就可见的积极效果而言)。
我在这方面的经验非常有限,但我最终使用了 C3P0,原因很简单,Hibernate 似乎无法处理 MySQL 重启。每天早上我都会收到“断管”,因为我们的托管服务每晚都会重新启动 MySQL。
我用谷歌搜索了它,我能找到的唯一建议是使用......应用服务器或 C3P0 的连接池。对我来说,后者工作得很好。
无论哪种池实现,您都应该在 Web 应用程序中始终使用连接池。打开与数据库的连接是一项非常昂贵的任务,并且能够重用已经存在的空闲连接极大地提高了您的站点性能。
连接可以由应用程序服务器(Tomcat、JBoss、Glassfish...)或您的应用程序管理。后者更容易设置,但很难根据部署进行自定义。在应用程序上配置连接池并设置您的站点以使用它可以轻松微调连接池参数,例如:保持打开的最小连接数、最大空闲时间等。
我总是使用连接池有两个原因:
如果您已经在使用 hibernate,只需修改 hibernate.cfg.xml 的connection.provider_class以使用org.hibernate.connection.C3P0ConnectionProvider并将 c3p0 jar 文件放入 servlet 的 WEB-INF/lib 文件夹中。完毕。
如果您使用 JNDI 和 GlobalNamingResources 声明,请修改type属性以指向com.mchange.v2.c3p0.ComboPooledDataSource并将 c3p0 jar 放入 Tomcat 的 /lib 文件夹。完毕。
C3P0 是一个非常不错的池,但我仍然建议使用您的应用服务器或 servlet 引擎的连接池,并将 Grails 配置为通过常规 DataSource 使用它。当您无法做到这一点时,请使用独立连接池(在这种情况下,C3P0 是一个不错的选择)。