我们计划实现连接池,因为这似乎是在数据库连接频繁打开和关闭时使用的正确机制。我们在下面显示我们的代码,但需要知道我们必须在哪里进行连接池定义。它应该在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);
}
}
}
答案 0 :(得分:4)
我建议使用现有的连接池解决方案(例如C3PO)。或者使用应用程序服务器的内置数据库池(所有这些都提供了这样的功能)。
答案 1 :(得分:1)
池本身不应该驻留在ConnectionHandler
中,因为一旦ConnectionHandler
完成运行它就会丢失。尽管如此,ConnectionHandler
必须具有对池的引用,以便能够实际获得数据库连接。因此,我想将池存储在cServer
类中,在main()
中对其进行实例化,并在ConnectionHandler
生成时为每个ConnectionHandler
提供一个引用。
我已经使用了C3P0和DBCP,但直到现在才听说过骨头CP。它看起来很有希望,但这就是我能说的全部内容。以下是a related post比较C3P0和DBCP。
答案 2 :(得分:1)