Mik*_*sen 8 java database pool jdbc single-threaded
我可以找到很多关于如何使用连接池的问题以及为什么这是一个好主意,但我想知道我是否真的需要它.
我正在创建一个服务器应用程序,虽然它是多线程的,但我一直小心,只有一个线程可以访问我的数据库连接.
那么使用连接池有什么意义吗?
我不能只在生命周期开始时打开与数据库的连接并永远使用那个连接,或者如果长时间处于非活动状态,它会超时吗?
我绝对要叫close()我连接上我用它做什么之后呢,还是足够的通话close()上ResultSet和/或Statement?
什么是"数据库连接",真的吗?它是与您的数据库的会话,因此:
现在,由于您的客户端应用程序是多线程的,我怀疑只有极少数情况下您的设置才有意义,即:
在所有其他情况下,您希望每个客户端线程有一个连接,或者在响应/异步环境中,每个隔离的数据库交互至少需要一个连接.而且因为创建新连接(即初始化服务器端会话状态等)很昂贵,所以人们只需使用连接池.实际上,连接池内部只能有一个连接(根据您的要求),它仍然是您使用的良好抽象.那么为什么要编写自己的连接池呢?
关于您的具体问题:
那么使用连接池有什么意义吗?
除了非常简单的情况(见上文),通常有一个连接池是好的.
我不能只在生命周期开始时打开与数据库的连接并永远使用那个连接,或者如果长时间处于非活动状态,它会超时吗?
当然可以.JDBC驱动程序或其他客户端库中通常有一个设置可以防止这些超时或重新连接.
这种方法的完美用例是迁移脚本,批处理脚本,简单测试脚本或简单的Swing应用程序等.所有这些都不需要连接池.
在使用它之后,我是否必须在我的连接上调用close(),或者在ResultSet和/或Statement上调用close()是否足够?
您应该调用close()从中获取DataSource.getConnection()的连接(例如,当连接池实现时DataSource).
您无需调用close()自己管理生命周期的连接.