我们计划实现连接池,因为当数据库连接频繁打开和关闭时,这似乎是正确的机制。我们显示了下面的代码,但需要知道我们必须在哪里进行连接池定义。它应该在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);
}
}
}发布于 2012-03-27 10:07:36
我建议使用现有的连接池解决方案(例如C3PO)。或者使用应用服务器的内置db池(所有它们都提供这样的特征)。
发布于 2012-03-27 10:10:36
池本身不应该驻留在ConnectionHandler中,因为一旦ConnectionHandler结束运行,它就会丢失。尽管如此,ConnectionHandler必须具有对池的引用,以便能够实际获得数据库连接。因此,我建议将池存储在cServer类中,在main()中实例化它,并在生成ConnectionHandler时为每个ConnectionHandler提供对它的引用。
我用过C3P0和DBCP,但直到现在还没有听说过Bone CP。它看起来很有希望,但这就是我所能说的。下面是比较C3P0和DBCP的a related post。
发布于 2012-03-27 10:31:34
如果要在Java EE容器中部署,请通过JNDI使用该容器的连接池。
如果不是在Java容器中部署,请使用库,如BonePC、DBCP或C3P0。
https://stackoverflow.com/questions/9882360
复制相似问题