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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqlite database browser 下载_SQLiteDeveloper

    sqlite database browser 下载_SQLiteDeveloper介绍一个SQLitepc端工具,可以查看SQLite

    2025年10月13日
    3
  • [网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集[通俗易懂]

    [网络安全自学篇] 二十二.Web渗透之网站信息、域名信息、端口信息、敏感信息及指纹信息收集[通俗易懂]这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。前文分享了Powershell基础入门知识,涉及条件语句、循环语句、数组、函数、字符串操作、注册表访问等。这篇文章将分享Web渗透的第一步工作,涉及网站信息、域名信息、端口信息、敏感信息及指纹信息收集。

    2022年6月16日
    21
  • SpringBoot+MyBatisPlus+Thymeleaf+AdminLTE增删改查实战

    SpringBoot+MyBatisPlus+Thymeleaf+AdminLTE增删改查实战说明AdminLTE是网络上比较流行的一款Bootstrap模板,包含丰富的样式、组件和插件,非常适用于后端开发人员做后台管理系统。因为最近又做了个后台管理系统,这次就选的是AdminLTE做主题模板发现效果不错,这里我把最核心的SpringBoot如何集成AdminLTE实现增删改查的源码提供出来,需要的朋友可以参考而少走弯路。实现效果技术选型前端:Thymeleaf+Bootstrap+AdminLTE+插件后端:SpringBoot2.0+Mybatis-Plus数据库:

    2022年7月27日
    13
  • navicat15 for mysql激活码【2021免费激活】「建议收藏」

    (navicat15 for mysql激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~14…

    2022年3月30日
    1.8K
  • 【已解决】Redis连接——Could not connect to Redis at 127.0.0.1:6379: Connection refused[通俗易懂]

    【已解决】Redis连接——Could not connect to Redis at 127.0.0.1:6379: Connection refused[通俗易懂]相信很多人很可能刚上手使用Redis时,很容易遇到的问题就是CouldnotconnecttoRedisat127.0.0.1:6379:Connectionrefused。由于只是记录bug解决,所以开门见山,宜春不多哔哔…其实原因很简单,这个问题一般是关闭了服务端导致客户端打不开,最简单快捷解决办法就是先开启服务端,再去连接客户端!如下:开启服务端需要先配置(redis.con…

    2022年6月6日
    1.1K
  • acwing-361. 观光奶牛(0/1分数规划)「建议收藏」

    acwing-361. 观光奶牛(0/1分数规划)「建议收藏」给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。输出这个最大值。注意:数据保证至少存在一个环。输入格式第一行包含两个整数 L 和 P。接下来 L 行每行一个整数,表示 f[i]。再接下来 P 行,每行三个整数 a,b,t[i],表示点 a 和 b 之间存在一条边,边的权值为 t[i]。输出格式输出一个数表示结果,保留两位小数。数据范围2≤L≤1000,2≤P≤50

    2022年8月10日
    5

发表回复

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

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