【发布时间】:2014-03-20 01:30:04
【问题描述】:
我是 Java 新手,是 Web 应用程序设计方面的新手,我很惊讶有多少东西我现在不会。
特别是我在理解 servlet 容器如何管理连接池类等资源方面遇到了问题。
假设我选择了一个池库(比如 c3p0),我了解到有很多方法可以使用和管理连接池类。
例如,在许多示例中,我看到某个类(比如 ComboPooledDataSource)在 servlet 的 init() 方法中被实例化,这让我有点困惑。我的意思是,我认为连接池系统必须存在,并且对于需要连接的所有 servlet 具有独立的生命,否则它没有任何意义。所以我认为下面的类可能是一个线程,它从调用 init 方法的第一个 servlet 启动一次,然后它继续存在,直到有人不中断它。那是对的吗?如果不是,它是如何工作的?
无论如何,一旦我开始这个类,它是否在上下文中的所有 servlet 之间共享(我的意思是在 init 方法中调用它的所有 servlet)?
其他示例将连接池系统设置为资源,例如在 context.xml 中定义它,然后任何想要连接的 servlet 只需通过 JNDI 访问它(JNDI 是否正确?)。我的理解(或我认为)是,在这种情况下,将在应用程序启动时启动将执行池系统的线程,并且每个 servlet 都可以在需要时访问它。那是对的吗?
在这种情况下,我可以通过 servlet 或后台线程运行时修改连接池系统属性吗? (例如,如果我想根据请求数等统计信息更改连接数)
如果我想创建不同的池(例如,我想将数据库访问细分到 N 个不同的数据库,或者我想使用不同的用户名进行访问),我是否需要创建与我想要的不同类型的连接一样多的资源?
这两者之间是否有“更好”的方式或者它们是等效的?
【问题讨论】:
-
我认为您对object pool 的用途有点困惑,连接池通常没有线程。
-
是的,那是因为我在问问题
-
始终使用您正在使用的应用程序服务器中内置的连接池。
-
感谢 Jarrod,但我为什么要这样做?
标签: java servlets jdbc connection-pooling