连接池

1. 数据库连接池
1.1 连接池概述

    连接池就是一次性创建多个连接,将多个连接缓存在内存中 ,形成数据库连接池,如果应用程序需要操作数据库,只需要从连接池中获取一个连接,使用后,并不需要关闭连接,只需要将连接放回到连接池中。

1.2 连接池的优点

    节省创建连接与释放连接性能消耗;

    连接池中连接起到复用的作用,提高程序性能。

没有使用连接池的情景:


使用连接池的情景:


1.3 连接池原理

        连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

2. 自定义连接池

(1)编写连接池需实现javax.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:

    •    Connection getConnection()

    •    Connection getConnection(String username,String password)

(2)实现DataSource接口,并实现连接池功能的步骤:

    •    在DataSource构造函数中批量创建与数据库的连接,并把创建的连接保存到一个集合对象中;

    •    实现getConnection方法,让getConnection方法每次调用时,从集合对象中取一个Connection返回给用户;

    •    当用户使用完Connection,调用Connection.close()方法时,Connection对象应保证将自己返回到连接池的集合对象中,而不要把conn还给数据库。

 

        自定义连接池时尽量不要使用具体对象类型的引用(如MyDataSource dataSource = new MyDataSource(); 应该写为DataSource dataSource = new MyDataSource(););若连接对象Connection是通过连接池获取的,当通过Connection对象调用close()方法时,不在是销毁连接对象,而是将连接对象放回到连接池。

3. DBCP连接池
3.1 DBCP连接池概述

    DBCP 是 Apache 软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个 jar 文件:

        commons-dbcp.jar:连接池的实现

        commons-pool.jar:连接池实现的依赖库

    Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

3.2 DBCP连接池的配置

(1)手动设置参数

    // 1.创建连接池对象

    BasicDataSource ds = new BasicDataSource();

    // 2.设置相关属性

    ds.setDriverClassName("com.mysql.jdbc.Driver");

    ds.setUrl("jdbc:mysql:///test");

    ds.setUsername("root");

    ds.setPassword("root");

(2)通过配置文件设置

    //1.加载配置信息

    Properties props = new Properties();                                       

    props.load(new FileInputStream(properties配置文件路径);

                 

    //properties文件内容

         driverClassName=com.mysql.jdbc.Driver

         url=jdbc:mysql:///test

         username=root

         password=root

 

    // 2.通过BasicDataSourceFactory获取一个连接池对象

    DataSource ds = BasicDataSourceFactory.createDataSource(props);

4. C3P0连接池
4.1 C3P0连接池概述

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,目前使用它的开源项目有Hibernate,Spring等。

4.2 C3P0连接池的配置

(1)手动配置

    //1.创建连接池对象

    ComboPooledDataSource ds = new ComboPooledDataSource();

    // 2.手动配置参数

    ds.setDriverClass("com.mysql.jdbc.Driver");

    ds.setJdbcUrl("jdbc:mysql:///test");

    ds.setUser("root");

    ds.setPassword("root");

(2)使用配置文件

    只要在src下创建c3p0.properties 或者 c3p0-config.xml名称的配置文件,c3p0会自动查找

 

    ComboPooledDataSource ds = new ComboPooledDataSource();自动查找配置文件

 

在src/c3p0-config.xml

    <c3p0-config>

         <default-config>

                  <propertyname="driverClass">com.mysql.jdbc.Driver</property>

                  <propertyname="jdbcUrl">jdbc:mysql:///test</property>

                  <propertyname="user">root</property>

                  <propertyname="password">root</property>

         </default-config>

    </c3p0-config>

 

或者在src/c3p0.properties

        c3p0.jdbcUrl=jdbc:mysql://localhost:3306/test

        c3p0.driverClass=com.mysql.jdbc.Driver

        c3p0.user=root

        c3p0.password=root

 

常用基本连接池属性:

   acquireIncrement   如果连接池中连接都被使用了,一次性增长3个新的连接

   initialPoolSize         连接池中初始化连接数量默认:3

   maxPoolSize           最大连接池中连接数量默认:15连接

   maxIdleTime          如果连接长时间没有时间,将被回收默认:0 连接永不过期

   minPoolSize           连接池中最小连接数量 默认:3

 

 

c3p0与dbcp区别:

    (1)dbcp没有自动回收空闲连接的功能;

    (2)c3p0有自动回收空闲连接功能。

5. Tomcat内置连接池
5.1 Tomcat内置连接池概述

        在web开发中,可以将连接池交给服务器管理,如果需要时,就可以直接从服务器中获取连接对象。在tomcat中提供了一个context.xml文件,可以将连接池配置在这个文件中。

context.xml文件可以放置在三个位置:

        (1)tomcat/conf下  这个配置是被服务器下所有应用所使用的.

        (2)tomcat/Catalina/xxx目录下,这个配置被某一个虚拟主机使用

        (3)在web工程的META-INF目录下创建一个context.xml文件,它是被当前工程所使用

5.2 JDNI概述

        JNDI(Java Namingand Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI服务供应接口(SPI)的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是命名服务的一种自然扩展 。

5.3 Tomcat内置连接池的配置

<Context>

      <Resource name="jdbc/abc"auth="Container"

                  type="javax.sql.DataSource"username="root" password="root"

                  driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql:///test"

                  maxActive="8"maxIdle="4"/>

</Context>

 

获取连接的方法:

    Context context= new InitialContext(); // 初始化上下文对象

    Context envCtx =(Context) context.lookup("java:comp/env"); // 固定写法

    DataSource ds =(DataSource) envCtx.lookup("jdbc/abc");// 通过绑定名称,查找指定java对象


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值