Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接池_Java_Connection Pooling - Fatal编程技术网

Java 连接池

Java 连接池,java,connection-pooling,Java,Connection Pooling,我们计划实现连接池,因为这似乎是在数据库连接频繁打开和关闭时使用的正确机制。我们在下面显示了我们的代码,但需要知道我们必须在哪里执行连接池定义。它应该在main()方法本身中还是在ConnectionHandler类中?另一件事:关于什么意见 我建议使用现有的连接池解决方案(例如C3PO)。或者使用应用服务器的内置数据库池(所有数据库池都提供此功能)。我建议使用现有的连接池解决方案(例如C3PO)。或者使用应用服务器的内置db池(所有这些池都提供了这样的功能)。池本身不应该位于Connectio

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


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

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

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


我使用过C3P0和DBCP,但到目前为止从未听说过Bone CP。看起来很有希望,但我只能说这些了。这里比较的是C3P0和DBCP。

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


我使用过C3P0和DBCP,但到目前为止从未听说过Bone CP。看起来很有希望,但我只能说这些了。这里比较C3P0和DBCP。

如果您在JavaEE容器中部署,请通过JNDI使用该容器的连接池


如果您不是在Java EE容器中部署,请使用库,如或。

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



如果您不是在Java EE容器中部署,请使用诸如或之类的库。

您根本不必自己“定义连接池”。DBMS供应商会这样做。这绝对是错误的做法。@duffymo我知道我想使用BoneCp,但在哪里定义池?你根本不必自己“定义连接池”。DBMS供应商就是这么做的。这绝对是错误的做法。@duffymo我知道我想使用BoneCp,但池的定义在哪里?+1表示不重新发明现有的、经过测试的、经验证的技术。哦,你有充分的理由自己来做这件事吗?@evgeny有没有关于如何做这件事的例子?是的,我计划使用Bone-Cp。我们使用的是mysql,那么mysql有内置池吗?不管你使用什么数据库。只需使用谷歌搜索“C3PO教程”或“Tomcat连接池”等,具体取决于您使用的环境。您将找到配置文件等的示例。您还可以使用Hibernate或EJB持久性,而不是使用原始JDBC(我想,只要您要编写自己的连接池,情况就是这样).@我不打算写我自己的池我想使用现有的池Bone Cp只是我想知道在哪里配置它及其相关信息。+1不重新发明现有的、经过测试的、经验证的技术。哦,你有充分的理由自己来做这件事吗?@evgeny有没有关于如何做这件事的例子?是的,我计划使用Bone-Cp。我们使用的是mysql,那么mysql有内置池吗?不管你使用什么数据库。只需使用谷歌搜索“C3PO教程”或“Tomcat连接池”等,具体取决于您使用的环境。您将找到配置文件等的示例。您还可以使用Hibernate或EJB持久性,而不是使用原始JDBC(我想,只要您要编写自己的连接池,情况就是这样).@我不打算写我自己的池我想使用现有的一个,骨骼Cp只是我想知道在哪里配置它和它的相关信息。因为你对这个池有经验,通常当池完成后会发生什么,会建立新的连接,或者他们必须等待现有的连接释放。使用连接池方法时,我们需要注意的任何主要问题。c3p0总是创建新连接,并且您可以控制旧连接过期的速率()。DBCP确实允许您设置最大池大小,但您可以通过将其设置为-1()来删除最大池大小。至于其他主要问题,我想说也许应该避免c3p0,因为它已经存在多年了,现在仍然是版本0.9。DBCP是非常积极地维护的。顺便说一下,“总是创建新的连接”,我的意思是C3P0总是在所有当前连接都在使用时创建新的连接,我想这就是您所问的情况。如果有可用的连接,则不会创建新连接。DBCP也是如此。因此,池化设置(通常您猜测使用100左右)是否太高?它确实取决于您的应用程序:用户数量、底层DBMS的连接容量、,等。我总是发现,你必须进行实验,以获得最佳大小。因为你对这个池有经验,通常情况下,一旦池全部完成,将建立新的连接,或者他们必须等待现有的连接被释放。使用连接池方法时需要注意的任何主要问题。c3p0
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);
    }

    }

}