如何在Java Servlet应用程序上为每个用户创建一个数据库连接?

1 java mysql servlets connection-pooling

我正在使用Java Servlets开发一个网站,我的研究表明,最好每个用户保持一个数据库连接(而不是每次只有一个连接在后台或者每次交易需要时连接到数据库)被制造).但是,我不知道如何做到这一点.我目前正在做的是在我的数据访问对象类中

private static Connection conn;
Run Code Online (Sandbox Code Playgroud)

我有一个HTTPSessionListener-on sessionCreated事件,我使用这个静态"conn"变量连接到数据库,并且在sessionDestroyed事件中我断开了"conn"变量:

...在我的"MySessionListener"中......

public void sessionCreated(HttpSessionEvent sessionEvent) {
    System.out.println("Session created!");
    DAO.connect();

}

public void sessionDestroyed(HttpSessionEvent sessionEvent) 
{
    System.out.println("Session destroyed");
    String user = (String) sessionEvent.getSession().getAttribute("userid" );
    if (user != null) DAO.signUserOut(user);
    DAO.disconnect();
}
Run Code Online (Sandbox Code Playgroud)

现在问题是:

  1. 我担心这种方式我本质上会降级为只有一个人人共享的连接(而不是我想要的每个用户的连接),只是如果没有用户我会不时断开连接.正确?
  2. 如果有多个用户在线并且一个人关闭了他们的会话,他们将为每个人关闭连接,直到其他人开始会话并为每个人创建新连接,对吗?我不能很好地测试这个,因为我在我的笔记本电脑上本地测试它有3个浏览器,但即使我关闭了一个浏览器上有我的网站,会话也不会立即死亡,我不知道到底发生了什么.我所知道的是,有时我得到一个例外,说"连接关闭后不允许任何交易".

Ale*_*man 5

通常,这是使用连接池实现的.您可以将其配置为具有可用的特定连接数,并且池管理打开和关闭连接.您的代码将仅从池中获取可用连接并在完成后返回.

看到这个(相当通用的)维基百科文章.

一些众所周知的池是DBCPC3P0.