使用ThreadLocal+Filter处理连接池的缺点

现在网上有很多推荐利用ServletFilter和ThreadLocal来处理数据库连接池或者是Hibernate的Session工厂,原理就是结合ThreadLocal使整个请求过程用的是同一个连接实例或者Session实例!

好处是

1. 不用多次从连接池取连接,性能较佳(这点我持怀疑态度,因为从连接池中取连接的消耗可以忽略不计)
2. 可以利用Hibernate的lazy load的特性
3. 代码更加简介、好看
4. 资源可以被可靠的释放

但是我要给用这种方法的人提个醒,先列两个缺点:

1. 因为过滤器必须配置url-pattern,处理你对你的系统中每一个需要用到数据库连接的页面进行单独配置(会导致web.xml文件超大),否则一些静态内容的页面也会致使占用数据库连接资源。

当然这点也是有办法解决的,就是按需分配资源,当有调用getConnection或者getSession的时候再去分配资源。

2. 当某些页面需要运行时间较长的操作,例如网络操作、大文件的处理等一些耗时的操作时,相比之下数据库操作仅仅是占了其中极其微小的一部分,这个时候导致的问题是,数据库连接资源被长时间占用,但是并没有进行操作。如果该页面有着非常大的并发访问时就会使连接池的连接被用完。

虽然有这样的缺点,但是还是可以通过一些变通的方法来解决!在这里我只是想提醒各位开发人员在设计的时候不要光是考虑模式,模式固然重要,但也不是放之四海而皆准的东西,一个系统好不好是用户说了算,不是设计人员或者是开发人员,所以在考虑一个设计方法的时候应该比较一下优缺点以及它们给用户带来的直接后果,并做出权衡!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值