1.在内存中开辟一块空间,存放多个数据库连接对象.
2.JDBC Tomcat Pool,直接由 tomcat 产生数据库连接池.
3.图示
3.1 active 状态:当前连接对象被应用程序使用中
3.2 Idle 空闲状态:等待应用程序使用
4.使用数据库连接池的目的:
在高频率访问数据库时,使用数据库连接池可以降低服务器系
统压力,提升程序运行效率.;小型项目不适用数据库连接池.5.实现 JDBC tomcat Pool 的步骤.
5.1 在 web 项目的 META-INF 中存放 context.xml,在 context.xml 编
写数据库连接池相关属性:<?xml version="1.0" encoding="UTF-8"?> <Context> <Resource driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/ssm" username="root" password="root" maxActive="50" maxIdle="20" name="test" auth="Container" maxWait="10000" type="javax.sql.DataSource" /> </Context>
5.2 把项目发布到 tomcat 中,数据库连接池产生了;
6.可以在 java 中使用 jndi 获取数据库连接池中对象
6.1 Context:上下文接口.context.xml 文件对象类型
6.2 jndi代码: java:comp/env/ 为固定写法 最后test为连接池配置的名称
Context cxt = new InitialContext();
DataSource ds = (DataSource)
cxt.lookup("java:comp/env/test");
package com.tao.servlet; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.sql.DataSource; @WebServlet("/pool") public class DemoServlet extends HttpServlet{ private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Context context; try { context = new InitialContext(); DataSource dataSource = (DataSource) context.lookup("java:comp/env/test"); Connection connection = dataSource.getConnection(); PreparedStatement psmt = connection.prepareStatement("select * from t_role"); ResultSet rs = psmt.executeQuery(); res.setContentType("text/html;charset=utf-8"); PrintWriter out = res.getWriter(); while(rs.next()){ out.println(rs.getLong(1)+" "+rs.getString(2)); } out.flush(); out.close(); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
6.3 当关闭连接对象时,把连接对象归还给数据库连接池,把状态
改变成 Idle
在Web项目中建立数据库连接池,使用JNDI 获取数据库连接池对象
最新推荐文章于 2022-09-02 14:10:44 发布