我正在构建一个小型网站,以供乐趣/学习使用一个相当标准的Web/服务/数据访问分层设计。
对于数据访问层,处理创建连接对象以调用我的SQL存储过程的最佳方法是什么?为什么?请记住,我正在手工编写大量的代码(我知道我可以使用Hibernate等为我编写大量的代码)。
1)我应该创建一个连接的静态实例并通过它运行所有的查询,还是会导致并发问题?
2)应该为每个数据库调用创建一个连接实例并接受性能开销吗?(如果情况是这样的话,我将在晚些时候研究连接池)
发布于 2008-09-23 13:24:04
每个线程应该使用一个Connection。不要在线程之间共享连接。
考虑使用 Apache DBCP。这是配置数据库连接并从池中提取它们的一种免费的标准方法。这是像Tomcat这样的高性能web服务器使用的方法。
此外,如果您使用的是DBCP,因为它是一个池(read: cached),经常创建/关闭连接几乎没有什么损失。
发布于 2008-09-23 15:17:33
标准的方法是设置一个DataSource。所有的应用服务器都可以通过他们的管理控制台做到这一点。然后,可以通过JNDI名称(例如"jdbc/MyDB")访问池。
实际上,数据源应该是一个连接池(通常是)。它缓存连接,在传递到应用程序之前对它们进行测试,并执行许多其他重要功能。
在你的代码中:
您可以自己设置池(使用任意一种免费的池实现),但如果使用应用程序服务器,则实际上没有任何意义。
因为它是一个web应用程序,所以确保在请求之后关闭连接的一个好方法是使用HttpFilter。您可以在web.xml中设置一个。当请求出现时,获取连接,并将其放入ThreadLocal。在请求期间,从ThreadLocal获取连接,但永远不要关闭它。请求之后,在筛选器中,关闭连接。
https://stackoverflow.com/questions/120941
复制相似问题