【问题标题】:Do MySQL Connections close automatically when the program exits? [duplicate]程序退出时 MySQL 连接会自动关闭吗? [复制]
【发布时间】:2015-03-21 04:01:39
【问题描述】:

如果我在我的 java 程序中创建一个 MySQL 连接,并且程序从 main 方法中退出,这个 MySQL 连接会发生什么?

public static void main(String args[])
{
    Connection conn = getConnection(...);

    return;    
}

这个连接会自动关闭吗?

或者连接在超时之前是否保持活动状态?

【问题讨论】:

标签: java mysql database


【解决方案1】:

当进程退出时,操作系统将关闭或重置进程的所有打开的 TCP 连接,具体取决于平台。在任何一种情况下,数据库服务器都会立即通知。没有超时。

【讨论】:

  • 不,虽然操作系统会立即清理客户端资源,但在后端不会这样。例如,在 Oracle 中,当直接连接的用户进程失败时,PMON“进程监视器”db 进程执行数据库端恢复。但是,这不是瞬间的。它有一些延迟,在繁重的数据库流量下会中断并引发“打开的连接过多”错误。
  • 我坚持我的言论。如果这就是它的工作方式,那么它的编程很糟糕。没有必要延迟。
【解决方案2】:

不,那是资源泄漏。 Connection 对象将不复存在,因为 JVM 只是在您的 main() 结束时终止,但在数据库服务器上分配的资源会保持打开一段时间,直到数据库决定在 超时后回收它们 em>。

这是一种非常糟糕的做法,因为如果程序在没有明确关闭其数据库Connection 的情况下终止,那么之前完成的所有数据库操作(如插入、更新等)会发生什么情况未定义 .有些 JDBC 驱动程序会提交您的更改,有些会执行隐式回滚

强烈建议不要依赖这种 undefined 特定于数据库的行为,因为这样您就放弃了使用与数据库无关的 JDBC API 的好处,并损害您的应用程序的可移植性而没有任何回报。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2012-12-11
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多