JDBC Connection.isValid() 用于单线程永久连接?

JDBC Connection.isValid() for single threaded permanent connection?

我正在编写一个应用程序,其中一个线程将使用 JDBC 永久连接到 MySQL 数据库,并且没有其他线程会使用此连接。

我的想法是这样的:

import java.sql.Connection;

public class ConHolder {

    private Connection con;

    public Connection getConnection(int checkTimeout) {
        if(!con.isValid(checkTimeout)) {
            con.close();
            con = createNewConnection();
        }
        return con;
    }

    private Connection createNewConnection() {
        return /* a newly created connection */;
    }

}

这样可以吗?或者是否需要实际的连接池?

我觉得还可以,差不多吧。唯一可能的问题是:

  • isValid 在 Java 6 之前不可用,并且

  • 仍然存在潜在的故障模式,即应用程序调用 isValid 和尝试使用该连接执行重要操作之间的连接出现问题1.


1 - 请注意,您可以获得与典型连接池相同的故障模式。唯一真正的解决方案是通过重新启动事务处理连接断开导致 SQLException 的情况。