Web App DAL中的JDBC数据库连接

时间:2020-03-06 14:35:54  来源:igfitidea点击:

我正在使用相当标准的Web /服务/数据访问分层设计构建一个用于娱乐/学习的小型网站。

对于数据访问层,处理创建Connection对象以调用SQL存储过程的最佳方法是什么?为什么?请记住,我正在手工编写很多代码(我知道我可以使用Hibernate等为我做很多事情)...

1)我应该创建一个Connection的静态实例并通过它运行所有查询,还是会导致并发问题?

2)是否应该为每个数据库调用创建一个Connection实例并接受性能开销? (如果是这种情况,我会在以后查看连接池)

解决方案

每个线程应使用一个"连接"。不要跨线程共享连接。

考虑使用Apache DBCP。这是配置数据库连接并从池中提取它们的一种免费的标准方法。这是诸如Tomcat之类的高性能Web服务器所使用的方法。

此外,如果我们使用的是DBCP,则由于它是一个池(已读取:已缓存),因此频繁创建/关闭连接几乎没有任何代价。

标准方法是设置数据源。所有应用程序服务器都可以通过其管理控制台来执行此操作。然后可以通过其JNDI名称(例如" jdbc / MyDB")访问该池。

数据源实际上应该是一个连接池(通常是)。它缓存连接,在传递给应用程序之前对其进行测试,并执行许多其他重要功能。

在代码中,我们:

  • 解析JNDI名称并将其转换为DataSource
  • 从数据源获取连接
  • 做你的工作
  • 关闭连接(它会回到这里的池中)

我们可以自己设置池(使用任何免费可用的池实现),但是如果我们使用的是应用程序服务器,则实际上没有任何意义。

P.S.
由于它是一个Web应用程序,因此确保我们在要求后关闭连接的一种好方法是使用HttpFilter。我们可以在web.xml中设置一个。当请求到来时,获取连接,并将其放入ThreadLocal。在请求期间,请从ThreadLocal获取连接,但不要关闭它。请求后,在过滤器中关闭连接。