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


相关推荐

  • JAVA中反射机制六(java.lang.reflect包)

    JAVA中反射机制六(java.lang.reflect包)一、简介java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,

    2022年7月3日
    27
  • MODIS数据介绍及下载

    MODIS数据介绍及下载MODIS数据简介中分辨率成像光谱仪(MODerate-resolutionImagingSpectroradiometer)-MODIS是Terra和Aqua卫星上搭载的主要传感器之一。MODIS标准数据产品根据内容的不同分为0级、1级数据产品,在1B级数据产品之后,划分2-4级数据产品,包括:陆地标准数据产品、大气标准数据产品和海洋标准数据产品等三种主要标准数据产品类型,总计分解为44种标准数据产品类型。数据产品的详细介绍参考博文。官网下载数据数据产品投影MODIS数据采用正弦投影(Sin

    2022年5月30日
    82
  • windows多线程(一) 创建线程 CreateThread「建议收藏」

    windows多线程(一) 创建线程 CreateThread「建议收藏」一线程创建函数CreateThread修改说明:"这里"说了另一种创建线程方法,使用_beginthreadex()更安全的创建线程,在实际使用中尽量使用_beginth

    2022年7月4日
    87
  • 一次手动查杀永恒之蓝病毒木马文件

    一次手动查杀永恒之蓝病毒木马文件在日常运维中,有一天发现我们深度威胁设备报出“MS17-010-RemoteCodeExecution-SMB(Request)”日志,很显然,这个电脑是被植入永恒之蓝病毒了,不断往外面发目标端口是445的包。现在表演手动查杀病毒木马文件。1、在CMD窗口下,输入如下命令:netatst–ano|findstr“445”,找出相关进程号,其中SYN_SENT状态,很显然…

    2022年10月17日
    2
  • [转]AVALONDOCK 2.0入门指南第一部分

    [转]AVALONDOCK 2.0入门指南第一部分AvalonDock2.0可以用来为WPF创建一个类似VisualStudio的界面,深入理解如何使用AvalonDock进行开发是很重要的。在这个入门指南里,我将演示如何开始使用AvalonDock,下面的文章都是基于2.0版本的。并且不能用于早期的版本。AvalonDock是一个组合的布局模型,很多的控件都在视图上显示,一个DockingManager类也显示在停靠…

    2022年7月20日
    12
  • microsoft visual studio2010 密钥_windows7产品密钥

    microsoft visual studio2010 密钥_windows7产品密钥4D974-9QX42-9Y43G-YJ7JG-JDYBP

    2022年10月14日
    2

发表回复

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

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