Ole*_*nko 11 java datasource jdbc
当我收到了Connection从DataSource,我应该手动关闭它?我的意思是,如果我必须关闭它,它将如何在未来的请求中使用?
Mar*_*eel 14
从连接池获得的连接应与正常连接完全相同.关于池的JDBC 4.2规范(第11.1节)说:
使用连接完成应用程序时,它会使用该方法关闭逻辑连接
Connection.close.这会关闭逻辑连接但不会关闭物理连接.而是将物理连接返回到池中,以便可以重用它.连接池对客户端完全透明:客户端获取池连接并使用它与获取和使用非池连接的方式相同.
(强调我的)
这意味着当你完成连接后,你总是打电话Connection.close()!无论是物理连接还是池中的逻辑连接都无关紧要.
原因是连接是物理(直接)连接还是逻辑连接应该纯粹是配置问题,而不是仅仅使用连接的应用程序代码的问题.
在连接池的情况下,close()遗嘱 - 细节可能会有所不同,并且某些实现在这方面存在问题 - 使逻辑连接无效并向连接池发出信号,表明底层物理连接可以重复使用.连接池可以进行一些有效性检查,然后将(物理)连接返回到池中或关闭它(例如,如果池有太多空闲连接,或者连接太旧,等等).
呼叫close()不仅是允许的,它对于连接池的正确工作甚至至关重要.不调用close()通常需要一些辅助线程来关闭(回收)已经使用太久的逻辑连接.由于此超时通常比正常的应用程序需求更长,因此可能导致池耗尽,或者导致池需要比实际需要更高的最大连接数的配置.
小智 5
您应该关闭Connection以便将其返回到池中,下次您将请求Datasource.getConnection()从池中获取连接。这里没有问题。有时您不想在每次操作后关闭连接并为多个操作使用相同的连接。在这种情况下,您不应该在最后一个操作完成之前关闭它。
| 归档时间: |
|
| 查看次数: |
3045 次 |
| 最近记录: |