我正在一个JSP网站上做一些非常糟糕的编码工作。对于每个数据库调用,原始程序员都会打开和关闭数据库连接。我要添加一些新的数据库操作,我想做的更好一些(稍后可以重建更多站点时,将出现诸如hibernate之类的东西)。我正在考虑在会话开始时(登录后)创建一个数据库连接,将其存储在会话对象中,然后在会话关闭时在会话处理函数的会话侦听器末尾将其关闭。这是一个合理的策略吗?有什么想法吗?
我正在考虑在会话开始时(登录后)创建一个数据库连接,将其存储在会话对象中,然后在会话关闭时在会话处理函数的会话侦听器末尾将其关闭。 这是一个合理的策略吗?有什么想法吗?
否。创建一个容器管理的连接池数据源,并在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。
getConnection()
ServletContextListener
应始终在尽可能短的范围内获取并关闭连接。try在执行查询的代码块中获取它,并在finally同一代码try块中将其关闭。断开连接的时间不要超过必要的时间。连接池将确保它们保持打开状态,因此该性能已经得到了极大的提高。
try
finally