Java servlet和数据库连接池

只是查看Web上连接池的示例,它们都基于每个servlet实现连接池。 因此每个servlet都有自己的数据库连接池。 我的问题是,为什么这类似于全局数据库连接池? 由于全局池似乎比每个servlet池更有效。

此外,因为我正在考虑实施这样的池。 有没有办法在servlet之前初始化一个类(我正在使用jetty btw)? 我刚刚开始进行servlet开发,但这对于其他类似于配置的东西似乎也很有用。 否则我只是会使用某种类似单身的模式..

1)我会说标准做法是在上下文描述符中将连接池设置为JNDI资源,这不是每个servlet要做的事情。

2)您将要实现并声明ServletContextListener 。

说实话,我真的不知道你在说什么。 也许你可以提供你看过的样品。

对我来说,一个“真正的”连接池应该完全与Servlet无关,并且在每个Servlet的基础上使用连接池是一个更多的使用细节(和一个坏的IMO)。 只需查看DBCP或c3p0 ,就可以在“容器外”上下文中使用连接池的良好示例。

另请注意,大多数(如果不是全部)容器实际上提供了自己的连接池实现(有时基于前面提到的示例),我认为没有任何充分的理由不使用它们。 使用它们的标准方法是使用JDNI命名服务注册DataSource 。 今天, DataSouce大部分时间是通过IoC注入的。 在过去,经常使用服务定位器模式。

在Jetty的情况下,请查看文档中的DataSource示例 。

我的问题是,为什么这类似于全局数据库连接池?

它不是! 所有servlet都应共享池中的连接!

此外,因为我正在考虑实施这样的池。

已经有方法(Spring IoC)注入容器管理的池连接。

。 有没有办法在servlet之前初始化一个类(我正在使用jetty btw)?

IoC容器可以引导每个资源和servlet!

您可以通过将Spring dispatcherServlet和包含映射和servlet的xml注册为bean定义来弹出连接servlet!

如果您只想注入连接并保留servlet的其余部分,请使用以下定义:

   

Web容器使用JNDI(使用连接池)提供ConnectionFactory(或类似)非常频繁,但配置它的方式不是标准化的。

有关如何使用Jetty,请参阅http://docs.codehaus.org/display/JETTY/DataSource+Examples 。

每个servlet具有连接池的一个优点是,如果其中一个servlet行为不当并使用其所有可用连接,那么其他servlet仍然会在其单独的池中提供连接。 这可以提高应用程序的稳定性。