是的,您应该考虑重用连接,而不是每次都创建一个新连接。通常的程序是:
- 对数据库可以明智地处理多少个并发连接进行一些猜测(例如,从数据库计算机上的每个 CPU 2 或 3 个开始,直到您发现这太少或太多 - 这往往取决于查询的磁盘绑定程度)
- 创建一个由这么多连接组成的池:本质上是一个类,您可以在每个方法的开头请求“下一个空闲连接”,然后在每个方法结束时“传递回”池
- 您的getFreeConnection()方法需要返回一个可用连接(如果可用),否则(1)创建一个新连接,最多达到您决定允许的最大连接数,或者(2)如果已经创建了最大值,请等待一个成为空闲连接
- 我建议使用信号量类来管理连接;实际上,我在我的网站上有一篇关于使用信号量管理资源池的短文,其中有一个我认为您可以适应您的目的的示例
几个实际注意事项:
- 为了获得最佳性能,您需要注意不要在实际使用它来运行查询时“占用”连接。如果从池中获取一次连接,然后将其传递给各种方法,则需要确保不会意外地执行此操作。
- 不要忘记将您的连接返回到池中!(尝试/终于是你的朋友在这里...)
- 在许多系统上,您无法“永远”保持连接打开状态:O / S将在一段时间后关闭它们。因此,在“将连接返回到池”方法中,您需要考虑“停用”已经存在很长时间的连接(构建一些用于记忆的机制,例如,通过在实际的JDBC连接对象周围设置一个包装器对象,您可以使用该对象来存储诸如此类的指标)
- 您可能需要考虑使用预准备语句。
- 随着时间的推移,您可能需要调整连接池大小