Dbcp连接池

Dbcp连接池

为什么使用连接池?

简言之:减少没必要的系统开销

凡是涉及到数据库访问的web应用,数据库连接管理是一个难点,也是未来大型应用性能优化的重点,如果对于连接资源管理混乱,将会使系统资源开销过大。制约大型应用性能的提升。

优化方案:使用连接池技术,将创建好的连接资源管理起来,当需要使用连接时,从连接池中获取,使用完毕之后将连接还回连接池,避免重复的创建和销毁连接资源,较少系统的开销。

怎样简单的使用连接池?

引入文件。百度云链接容易失效就不放,本博客仅用于个人学习,有想学的可以找我要文件,私信就行。

 

Dbcp 是连接池的一种实现方式

 1 导入dbcp 相关的jar包

2  导入dbcp的配置文件, 的dbcp.properties .

Dbcp连接池

方法和前面一样。

Dbcp连接池再导入一个新的对应键。

Dbcp连接池

 对工具类进行升级,稍后会对工具类那篇文章进行更新。

package util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;



public class jdbcUtil3 {
	//创建连接池
		static DataSource pool = null;
		//创建properties
		 static Properties  pro =  new Properties();
		 //创建Thread	local<Connection>,可以为同一个线程保存同一个连接,为不同线程保存不同的连接
		 private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
		 
		 //加载配置文件到流对象后创建连接池
		 static{
			InputStream is = null;
			try {
				//加载properties文件到properties对象中
				is = jdbcUtil3.class.getResourceAsStream("/conf/dbcp.properties");
				pro.load(is);
			//	Class.forName(pro.getProperty("driverClassName"));
			//创建连接池
				pool = BasicDataSourceFactory.createDataSource(pro);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 	
			finally{
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		//获取连接
		public static  Connection getConnection() throws Exception{
			Connection conn = tl.get();//获得当前线程中的连接
			//如果当前线程中没有连接,就获取连接(使用连接池)
			if(conn == null){//如果当前线程中没有连接
				String url = pro.getProperty("url");
				String user = "root";
				String password = "root123";	
				//创建连接
			    conn = pool.getConnection();
			    //将连接保存到当前线程
			    tl.set(conn);
			}
			return conn;	
		}
		//释放资源/关闭连接
		public static void release(ResultSet rs,PreparedStatement psm,Connection conn) throws SQLException{
			if(rs!=null){
				rs.close();
			}
			if(psm!=null){
				psm.close();
			}
			if(conn!=null){
				conn.close();
				//关闭连接时,将连接从当前线程中移出,防止,内存溢出
				tl.remove();
			}	
		}
}

测试一下吧:

package jdbc;

import java.sql.Connection;

import util.jdbcUtil3;

public class TestjdbcUtil3 {
	public static void main(String[] args) throws Exception {
		Connection conn = jdbcUtil3.getConnection();
		System.out.println(conn);
		Connection conn1 = jdbcUtil3.getConnection();
		System.out.println(conn1);
		Connection conn2 = jdbcUtil3.getConnection();
		System.out.println(conn2);
		Thread t1 = new Thread(){
			public void run(){
				Connection conn3;
				try {
				 conn3 =	jdbcUtil3.getConnection();
					System.out.println("t1: " +conn3);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		};
		t1.start();
	}
}

结果为:,,你没有看错,用连接池连接的,会有点不一样,不是干瘪的一行地址了

Dbcp连接池

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114778.html原文链接:https://javaforall.net

(0)
上一篇 2021年10月3日 上午8:00
下一篇 2021年10月3日 上午9:00


相关推荐

  • 求delay函数的原理

    求delay函数的原理哪位大哥知道c语言delay函数的原理 

    2022年5月24日
    47
  • ELK 收集 Tomcat 日志「建议收藏」

    ELK 收集 Tomcat 日志「建议收藏」01Tomcat安装与测试1.1安装Tomcat安装Tomcat的本体和相关官方测试demo,参考链接apt-getinstalltomcat8-y#安装Tomcat本体apt-getinstalltomcat8-docstomcat8-examplestomcat8-admin-y#安装测试demo1.2Tomcat启动检查systemctlstarttomcat8#启动Tomcatsystemctlstatustomcat8netstat

    2022年6月20日
    28
  • storm源代码分析—Transactional spouts

    storm源代码分析—Transactional spouts

    2022年1月30日
    37
  • 【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程

    【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程目录一、前言二、官方安装教程及软件包1、官方教程2、CUDAToolkit10.0Download3、cuDNNDownload三、Win10安装CUDA10及cuDNN1、CUDA安装2、cuDNN配置3、万事大吉,只欠重启四、一些后事问题1:安装过程中电脑自动重启。问题2:安装完成后找不到CUDA文件夹。一、前言其实听早就接触NV…

    2022年6月10日
    48
  • python 面向对象全面详解

    python 面向对象全面详解目录 nbsp 一 对面向对象的理解 1 面向对象的编程 objectorient python 面向对象的重要术语 3 函数和面向对象编程的区别二 封装 继承 多态 1 封装 Encapsulatio 2 继承 Inheritance 3 多态 Polymorphism 三 面向对象的各种方法 1 静态方法 nbsp 用这个装饰器来表示

    2026年3月26日
    1
  • Verilog流水线_verilog菜鸟教程

    Verilog流水线_verilog菜鸟教程需求说明:Verilog设计基础内容   :流水线设计来自   :时间的诗流水线设计前言:本文从四部分对流水线设计进行分析,具体如下:第一部分什么是流水线第二部分什么时候用流水线设计第三部分使用流水线的优缺点第四部分流水线加法器举例第一什么是流水线流水线设计就是将组合逻辑系统地分割

    2022年8月14日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号