什么时候必须关闭数据库连接? (JAVA)

时间:2014-03-07 07:19:54

标签: java postgresql jdbc

所以我有一个Java进程无限期地作为TCP服务器运行(从另一个进程接收消息,并且有onMsg处理程序)。

我想用Java程序中的消息做的一件事就是使用与postgres的数据库连接将其写入磁盘。现在,我有一个静态连接对象,我每次收到消息时都会调用它。我不会关闭并重新打开每条消息的连接。

我对Java仍然有点新意,我想知道1)使用一个无限期打开的连接对象是否存在任何陷阱或危险; 2)从不关闭连接是否有性能优势,而不是重新打开/每次我想要关闭数据库时关闭?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

  

我不会关闭并重新打开每条消息的连接。

是的,你做...至少就普通Connection对象而言。否则,如果你最终断开连接,它将永远被打破,如果你需要同时执行多个操作,你就会遇到问题。

你想要的是一个连接池来管理"真正的"连接到数据库,您只需要从池中为每个操作请求连接,并在完成后关闭它。关闭"逻辑"连接只返回"真实"连接到池以进行其他操作。 (池可以处理心跳保持连接,随着时间推移退休连接等。)

有很多可用的连接池技术,自从我使用" plain"以来已经很长时间了。 JDBC,所以我不想说现在的最新技术水平 - 但你可以为自己做的研究:)

答案 1 :(得分:3)

创建数据库连接始终是性能损失。只有非常天真的实现才能为每个操作创建和关闭连接。如果你只需要每小时做一次,那么这是可以接受的。

但是,如果您的程序每分钟执行多次数据库访问(对于较大的应用程序甚至每秒执行一次),您不希望实际关闭连接。

那么什么时候关闭连接?简单回答:让连接池为您处理。你要求池连接,它会给你一个开放的连接(它已经缓存,或者它真的需要,一个全新的连接)。当您完成查询后,您close()连接,但它实际上只返回到池的连接。

对于非常简单的程序来说,设置一个连接池可能是额外的工作,但它并不是很困难,绝对是你想要掌握的东西。有几个开源连接池,例如来自Apache的DBCP3CPO