使用连接池后返回连接时如何检查连接是不是处于活动状态?

Posted

技术标签:

【中文标题】使用连接池后返回连接时如何检查连接是不是处于活动状态?【英文标题】:How to check connection is live or not while returning connection after using it connection pool?使用连接池后返回连接时如何检查连接是否处于活动状态? 【发布时间】:2017-02-24 06:28:28 【问题描述】:

我正在将连接添加到arraylist中,并在需要使用它们时一一获取,这里我使用的是来自连接池的连接,

ArrayList<Connection> al=new ArrayList<Connection>();

public Connection getconnection()
    if(al.size()>0)
    
       try
            connection = al.get(0);
            al.remove(connection);
          catch(Exception e)
            out.print(e);
           
    else
        out.println("No Database connection is Available !");
    
    return connection;

使用此连接后,我会将其返回连接池。

public void returnconnection(Connection con)
    Connection c = con;
    al.add(c);
    out.println("Hi I'm Connection, I'm back! ");
 

在添加到 ArrayList 之前,我需要检查此连接是否处于活动状态?

【问题讨论】:

this 有用吗? 不要扮演您自己的连接池的角色。使用现有的,如 HikariCP、DBCP、c3p0 等。它将为您省去很多麻烦和错误。 【参考方案1】:

找到了解决这个问题的方法,希望对你有帮助,

//checking connection is live or not
public boolean checkconnection(Connection conn)
    Connection validconnection = conn;
    try
        if(validconnection.isValid(1) && validconnection !=null)
        return true;
    catch(Exception er)
        out.println("\n I'm not valid connection I can be null or Invalid, Please Check!");
     
    return false;

//Adding Connection back to pool
public void returnconnection(Connection con) throws Exception
    Connection c = con;
    boolean validreturncon=checkconnection(c);
    if (validreturncon)
        al.add(c);
        out.println("Hi I'm Connection, I'm back! ");
    
    else
        out.println("\n Dead Connection, No need to put me into ArrayList! ");
    

【讨论】:

以上是关于使用连接池后返回连接时如何检查连接是不是处于活动状态?的主要内容,如果未能解决你的问题,请参考以下文章

检查 Android 中的 *** 连接是不是处于活动状态并显示消息? [复制]

检查Windows 7中的远程桌面连接是否处于活动状态

IIS 回收应用程序池时如何保持 Blazor 服务器连接处于活动状态

如何在后台保持 iphone ios websocket 连接处于活动状态?

为啥当我尝试检查套接字连接状态时应用程序崩溃?

AccountManagerFuture.getResults 在连接处于活动状态时抛出 IOException