首页 > 代码库 > 数据库连接池--Tomcat内置实现

数据库连接池--Tomcat内置实现

1.JNDI(Java Naming and Directory Interface,Java命名和目录接口)

  是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。可以理解为一个容器,可以在其中存放任意内容,在容器中为内容提供一个字符串名称,名称命名方式采用是目录结构方式,在其他地方引用该名称就可以得到该内容.

2.实现

  思想:将数据库连接池作为服务器端的资源存放在JNDI容器中,使用时从容器中取出资源,即数据库连接池.

  a)将对象存在在JNDI容器

    在Web工程的WebRoot\META-INF\目录下创建Context.xml文件,将对象作为资源存放入容器中,也可以被其他Web项目所访问.

      

<?xml version="1.0" encoding="UTF-8"?><Context>    <!-- #1 给tomcat 配置对象,将内容添加jndi容器 -->  <Resource name="jdbc/pool" auth="Container" type="javax.sql.DataSource"               maxActive="100" maxIdle="30" maxWait="10000"               username="root" password="1234" driverClassName="com.mysql.jdbc.Driver"               url="jdbc:mysql://localhost:3306/day17"/></Context>

 

  b)当前web项目从tomcat jndi容器将需要对象进行引用。

    在当前项目\WebRoot\WEB-INF路径下的web.xml文件中添加如下代码

<!-- #2 从jndi容器引用已经存在对象 -->    <resource-ref>      <res-ref-name>jdbc/pool</res-ref-name>      <res-type>javax.sql.DataSource</res-type>      <res-auth>Container</res-auth>  </resource-ref>

 

  c)jsp 或 java代码 使用

<%@page import="java.sql.Connection"%><%@page import="javax.sql.DataSource"%><%@page import="javax.naming.InitialContext"%><%@page import="javax.naming.Context"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!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>Insert title here</title>    <%--查询数据 --%>    <sql:query var="rs" dataSource="jdbc/pool">        select * from t_user    </sql:query>    </head><body>    <c:forEach items="${rs.rows}" var="row">        ${row.id}        ${row.username}        ${row.password}    </c:forEach>      <%        //1初始化jndi容器,包:javax.naming        Context initContext = new InitialContext();        //2初始java环境        Context envContext  = (Context)initContext.lookup("java:/comp/env");        //3获得自定义内容        DataSource ds = (DataSource)envContext.lookup("jdbc/pool");        Connection conn = ds.getConnection();        out.print(conn);    %></body></html>

 

数据库连接池--Tomcat内置实现