MySQL+tomcat9数据库连接池

时间:2021-05-22 20:57:20

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的连接,需要建立数据库连接时,只需从池中取出一个,使用完毕之后再放回去。
配置tomcat安装目录下conf目录下的context.xml文件:

<Resource name="jdbc/MySQL" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root" password="wen550643" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" />

<!-- name:数据库连接池的JNDI注册名。 auth:验证方式,Container表示容器负责验证,另一可选项为Application。 type:数据库连接池的类型,默认为javax.sql.DataSource. driverClassName:所使用的JDBC驱动完成Java类名。 username:数据库用户名。 password:数据库用户密码。 url:数据库的URL。 initialSize:连接池初始化时创建的链接数量,默认为0。 maxTotal:从连接池同时可分配的链接数量,默认为8。 minIdle:同时可以在连接池中闲置链接的最低数目,默认为0。 maxIdle:同时可以在连接池中闲置链接的最大数目,默认为8。 maxWaitMillis:当没有链接时,在抛出异常之前,连接池需等待链接归还的最大毫秒数,默认值为-1(无限)。 -->

配置web工程下的web.xml文件:

<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/MySQL</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

建立DBUtil类,使用getConnection方法来获取数据库连接

public class DBUtil {
    public static Connection getConnection() throws NamingException,SQLException{
        Connection result=null;
        InitialContext ctx=new InitialContext();
        DataSource ds=(DataSource)ctx.lookup("java:/comp/env/jdbc/MySQL");
        result =ds.getConnection();
        return result;
    }
}

建立测试文件

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*,com.wyl.JavaBean.DBUtil" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JNDI 数据源示例</title>
</head>
<body>
    <% Connection con=null; Statement stmt=null; ResultSet rs=null; try{ con=DBUtil.getConnection(); stmt=con.createStatement(); rs=stmt.executeQuery("select * from employee"); while(rs.next()){ out.println(rs.getString(2)+","); out.println(rs.getString(3)); out.println("<br/>"); } }catch(SQLException e){ ; }finally{ if(stmt!=null){ try{ stmt.close(); }catch(SQLException e){ ; } } if(con!=null){ try{ stmt.close(); }catch(SQLException e){ ; } } } %>
</body>
</html>