连接池

时间:2012-03-27 01:52:21

标签: java connection-pooling

我们计划实现连接池,因为这似乎是在数据库连接频繁打开和关闭时使用的正确机制。我们在下面显示我们的代码,但需要知道我们必须在哪里进行连接池定义。它应该在main()方法本身还是在ConnectionHandler类中?另一件事:关于BoneCP的意见是什么?

public class cServer
{

   class ConnectionHandler implements Runnable {
        ConnectionHandler(Socket receivedSocketConn1) {
          this.receivedSocketConn1=receivedSocketConn1;
        }
   public void run(){
          createConnection();
          processData();
          closeConnection();
       }
    }

    public void main()
    {
    try 
    {
      final ServerSocket serverSocketConn = new ServerSocket(8000);             
      while (true){
        try{
            Socket socketConn1 = serverSocketConn.accept();
            new Thread(new ConnectionHandler(socketConn1)).start();                     
       }
       catch(Exception e){
         e.printStackTrace(System.out);
       }
      }
    } 
    catch (Exception e){
      e.printStackTrace(System.out);
    }

    }

}

3 个答案:

答案 0 :(得分:4)

我建议使用现有的连接池解决方案(例如C3PO)。或者使用应用程序服务器的内置数据库池(所有这些都提供了这样的功能)。

答案 1 :(得分:1)

池本身不应该驻留在ConnectionHandler中,因为一旦ConnectionHandler完成运行它就会丢失。尽管如此,ConnectionHandler必须具有对池的引用,以便能够实际获得数据库连接。因此,我想将池存储在cServer类中,在main()中对其进行实例化,并在ConnectionHandler生成时为每个ConnectionHandler提供一个引用。

我已经使用了C3P0和DBCP,但直到现在才听说过骨头CP。它看起来很有希望,但这就是我能说的全部内容。以下是a related post比较C3P0和DBCP。

答案 2 :(得分:1)

如果要在Java EE容器中部署,请通过JNDI使用该容器的连接池。

如果您未在Java EE容器中部署,请使用BonePCDBCPC3P0等库。