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

时间:2015-01-23 13:18:45

标签: java mysql sql jdbc connection-pooling

我正在编写一个应用程序,其中一个线程将使用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 */;
    }

}

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

1 个答案:

答案 0 :(得分:1)

我认为没关系,或多或少。唯一可能的问题是:

    在Java 6之前
  • isValid不可用,

  • 仍然存在潜在的故障模式,其中连接在调用isValid的应用程序之间变坏并且尝试使用连接来执行重要的事情 1


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