3.2K Star 8.8K Fork 3.6K

GVPJFinal / JFinal

 / 详情

Tx.java 问题

待办的
创建于  
2015-06-15 22:01

如果在Cotroller的method上添加@Before(Tx.class)的话,那么这个事务是控制到这个method开始到结束。我看了Tx.java 这个文件中,interpret方法最后调用conn.close(); 请问,既然使用连接池来管理连接,这里需要关闭连接吗?如果在这个关闭连接,那么连接池还起到连接池应有的作用吗!

评论 (2)

这个问题问得好,在很久以前就有人问过此问题。具体细节是这样的,当你从连接池中获取到了一个 Connection 对象,你是一定要去关闭的,否则很快就会耗尽连接造成系统无法响应,也可以理解成一种资源回收泄漏。

而上例代码中的 conn.close() 实际上就是告诉连接池管理类这个连接需要回收到池子里面去,好让后续的线程再获取后再利用,如果不调用 conn.close(),那么这个连接就被认为一直被某个线程在占用着。

简单来说,从连接池中获取到的连接,调用它的 close() 方法以后并不是真正断开与数据库的连接,而是连接池回收该连接入池,好再利用,注意观察这个 Connection 对象的类型,是被连接池代理过的对象,它的 close() 方法已经被改变了行为,不是断开与库的连接,而是加收到池子里,当然还有很多其它操作,例如一些属性复位等等。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
840 jfinal 1580661334
Java
1
https://gitee.com/jfinal/jfinal.git
git@gitee.com:jfinal/jfinal.git
jfinal
jfinal
JFinal

搜索帮助