JDBC:数据库连接池druid

JDBC:数据库连接池druid,第1张

概述一、数据库连接池 小白喊话:本文应该有很多不严谨的地方,仅供参考,日后学成归来再做完善。 部分参考自: "https://blog.csdn.net/crankz/article/detai 一、数据库连接池

小白喊话:本文应该有很多不严谨的地方,仅供参考,日后学成归来再做完善。

部分参考自:

https://blog.csdn.net/crankz/article/details/82874158

https://blog.csdn.net/dzy21/article/details/51952138

1、数据库连接池是啥

我们之前通过DriverManager.getConnection()方法获得的Connection数据库连接对象与数据库进行沟通。而每次获取一次连接对象,就会开启一次物理连接,用完关闭连接,连接次数一多,就会造成系统性能低下。

而数据连接池的设计一定程度上解决了一部分问题:数据库连接池在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态地对池中的连接进行申请、使用和释放。 通过共享连接,减少开关连接的次数,提高程序的效率。

请求连接的时候取出连接,不需要的时候,conn.close()归还连接(注意是归还!!!)。如果请求连接数>连接池中连接的数量,那么后面来的需要在请求队列中等待。

2、数据库连接池的优点

使用数据库连接池之后,只有第一次访问的时候,需要建立连接。之后的访问,将会复用之前创建的连接,直接执行SQL语句,减少了网络开销,提升了系统的性能。

二、druID简单bb

连接池技术有许多实现,像经典的C3P0,DBCP啥的,就暂且放一放了。今天主要学习阿里巴巴开发的DruID,在网上查阅了很多资料,据说是在功能、性能方面、扩展性方面都比较优秀,而且大都结合Spring之类应用,瑟瑟发抖,目前还没学到,以后学到再做补充。

druID核心实现类就是DruIDDataSource,间接实现了DataSource接口。

可以通过一个工厂类DruIDDataSourceFactorypublic static DataSource createDataSource(PropertIEs propertIEs)方法,创建DataSource对象。

通过传入PropertIEs配置文件对象配置数据库连接池,返回一个DataSource对象,而这个对象便是数据库连接池的核心,官方文档是这么说的:

A factory for connections to the physical data source that this DataSource object represents.

The DataSource interface is implemented by a driver vendor

There are three types of implementations: Basic implementation,Connection pooling implementation,distributed transaction implementation.

大概意思就是,DataSource接口主要有三种实现方式:基本的实现、连接池实现和分布式事务的实现,也就是说:定义的连接池实现类得遵循这这接口定义的一些规则,实现类往往由驱动程序供应商提供,而且实现该接口的对象往往会依据Java Naming and Directory(JNDI)命名目录服务器注册,初看不太明白,结合一下百度百科:

包含了大量的命名和目录服务,使用通用接口来访问不同种类的服务,JNDI架构提供了一组标准于命名系统地API。这些API构建在与命名系统有关的驱动上,有助于企业级应用与实际数据源分离。(ps:先摘抄这,以后会明白的)

DataSource接口中存在与数据库连接的方法getConnection(),也就是说,之后就可以利用这个DataSource对象获取与数据库的连接。

之后的 *** 作,就如往常一样。

三、简单使用

改良一下封装类JDBCUtils。

package com.my.utils;import com.alibaba.druID.pool.DruIDDataSourceFactory;import javax.sql.DataSource;import java.io.IOException;import java.sql.Connection;import java.sql.ResultSet;import java.sql.sqlException;import java.sql.Statement;import java.util.PropertIEs;/** * @auther Summerday * DruIDDataSource连接池引入的JDBC工具类 */public class JDBCUtils {    //定义连接池对象    private static DataSource ds;    static{        try {            PropertIEs prop = new PropertIEs();            //利用配置文件加载prop对象            prop.load(JDBCUtils.class.getClassLoader().getResourceAsstream("druID.propertIEs"));            //通过prop创建连接池对象            ds = DruIDDataSourceFactory.createDataSource(prop);        }catch (IOException e){            e.printstacktrace();        } catch (Exception e) {            e.printstacktrace();        }    }    /**     * 获取连接     */    public static Connection getConnection() throws sqlException {        return ds.getConnection();    }    /**     * 释放资源     */    public static voID close(Statement statement,Connection connection){        close(null,statement,connection);    }    /**     * 释放资源     */    public static voID close(ResultSet resultSet,Statement statement,Connection connection){        if(resultSet!=null){            try {                resultSet.close();            } catch (sqlException e) {                e.printstacktrace();            }        }        if(statement!=null){            try {                statement.close();            } catch (sqlException e) {                e.printstacktrace();            }        }        if(connection!=null){            try {                connection.close();            } catch (sqlException e) {                e.printstacktrace();            }        }    }    /**     * 获取连接池对象     */    public static DataSource getDataSource(){        return ds;    }}
参数配置

连接池的参数配置,暂时学习几个简单一些的,定义在".propertIEs"文件中,到时候读取配置文件,配置连接池属性。

可以参考:https://www.cnblogs.com/kaleidoscope/p/9669753.html

driverClassname=com.MysqL.jdbc.Driverurl=jdbc:MysqL://localhost:3306/mydb2username=rootpassword=123456#初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时initialSize=5#定义最大连接池数量maxActive=10# 超时等待事件(毫秒)maxWait=3000
总结

以上是内存溢出为你收集整理的JDBC:数据库连接池druid全部内容,希望文章能够帮你解决JDBC:数据库连接池druid所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1151871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存