一尘不染

JSP站点的连接池策略?

jsp

我正在一个JSP网站上做一些非常糟糕的编码工作。对于每个数据库调用,原始程序员都会打开和关闭数据库连接。我要添加一些新的数据库操作,我想做的更好一些(稍后可以重建更多站点时,将出现诸如hibernate之类的东西)。我正在考虑在会话开始时(登录后)创建一个数据库连接,将其存储在会话对象中,然后在会话关闭时在会话处理函数的会话侦听器末尾将其关闭。这是一个合理的策略吗?有什么想法吗?


阅读 217

收藏
2020-06-10

共1个答案

一尘不染

我正在考虑在会话开始时(登录后)创建一个数据库连接,将其存储在会话对象中,然后在会话关闭时在会话处理函数的会话侦听器末尾将其关闭。
这是一个合理的策略吗?有什么想法吗?

否。创建一个容器管理的连接池数据源,并在Webapp启动时由JNDI获取。

如何创建数据源取决于所涉及的容器。例如,在Tomcat 6.0的情况下,您可以在此处阅读:Tomcat JNDI资源HOW-TO-
JDBC数据源
。例如,如果是Glassfish 3,则可以在基于Web的管理控制台中通过http://
localhost:4848进行操作

这是您最终可以从JNDI获得它的方法:

DataSource dataSource = (DataSource) new InitialContext().lookup(jndiName);
// ...

您可以调用getConnection()它。仅在webapp启动期间获取一次数据源就足够了,例如在数据库连接管理器的静态初始化程序块中或在中ServletContextListener

应始终在尽可能短的范围内获取并关闭连接。try在执行查询的代码块中获取它,并在finally同一代码try块中将其关闭。断开连接的时间不要超过必要的时间。连接池将确保它们保持打开状态,因此该性能已经得到了极大的提高。

2020-06-10