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


相关推荐

  • 文件传输加密原理

    文件传输加密原理

    2022年3月12日
  • MybatisCodeHelperPro2.9离线激活码-激活码分享

    (MybatisCodeHelperPro2.9离线激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1PA3AFINM4-eyJsaWNlbnNlSWQi…

    2022年3月31日
  • Java锁的分类_地锁怎么安装

    Java锁的分类_地锁怎么安装1.Java锁的种类在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,在此做一个总结。介绍的内容如下:乐观锁/悲观锁独享锁/共享锁互斥锁/读写锁可重入锁公平锁/

    2022年8月3日
  • traceroute的原理与使用

    traceroute的原理与使用traceroute,路由跟踪,用来跟踪一个分组从源点到终点的整个过程。原理分析traceroute是通过ICMP协议中的时间超时差错报告报文来实现的,他从源主机到目的主机发送一连串的IP数据报p1-pn,并且数据报是无法交付的udp数据报。第一个数据报的TTL设置为1,这样当这个数据报转发到第一个路由器的时候,路由器收到后TTL减1,减完1之后发现TTL变为0,路由器会向源主机发送一个超时差…

    2022年7月21日
  • 不含重复字符的最长子串长度JAVA_字符串回文判断

    不含重复字符的最长子串长度JAVA_字符串回文判断给你一个二进制字符串 s ,现需要将其转化为一个 交替字符串 。请你计算并返回转化所需的 最小 字符交换次数,如果无法完成转化,返回 -1 。交替字符串 是指:相邻字符之间不存在相等情况的字符串。例如,字符串 “010” 和 “1010” 属于交替字符串,但 “0100” 不是。任意两个字符都可以进行交换,不必相邻 。示例 1:输入:s = “111000”输出:1解释:交换位置 1 和 4:”111000″ -> “101010” ,字符串变为交替字符串。示例 2:输入:s =

    2022年8月9日
  • mfc窗口置顶_mfc treecontrol

    mfc窗口置顶_mfc treecontrol版权声明:www.gudianxiaoshuo.com原创文章版权–古典小说网         WM_CONTEXTMENU消息用来响应鼠标右键消息,它响应的不是鼠标右键按下消息,也不是鼠标右键弹起消息而是鼠标右键依次按下弹起后触发的消息。          因此,若程序还响应了鼠标右键按下的消息OnRButtonDown,且在此响应函数中有模特对话

    2022年10月17日

发表回复

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

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