数据库连接池的概念及C3P0、Uruid两种连接池的使用

目录

1 为什么要使用数据库连接池

2 数据库连接池的标准规范

3 C3P0 连接池的使用

4 Druid 连接池的使用


1 为什么要使用数据库连接池

JDBC使用时,会创建数据库连接Connection对象,使用完毕后,再将这个对象销毁掉,而每次创建和销毁数据库连接对象都是需要耗费时间的,因此需要优化数据库的连接过程,提高效率。
优化思路:程序初始化的时候,初始化多个连接,将多个连接放入到池(集合)中,每次获取的时候,直接从连接池中获取连接对象,使用结束后,将连接归还到池中

                                     

数据库连接池思想如上图所示:
(1)程序一开始就创建一定数量的连接,放在一个容器中,这个容器称为连接池(相当于容器)。
(2)使用的时候直接从连接池中取一个已经创建好的连接对象。
(3)关闭的时候不是真正关闭连接,而是将连接对象再次放回到连接池中。 

2 数据库连接池的标准规范

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池,而不必要修改大量代码。
常见的第三方连接池如下:
(1)DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目,也是Tomcat使用的连接池组件。dbcp没有自动回收空闲连接的功能。
(2)C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0是异步操作的,所以一些操作时间过长的JDBC通过其它的辅助线程完成。目前使用它的开源项目有Hibernate,Spring等。C3P0有自动回收空闲连接功能。
(3)阿里巴巴-德鲁伊 Druid 连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求(性能好,常用)。

3 C3P0 连接池的使用

对开发人员来说,学习C3P0很简单,就是从连接池中拿连接来使用而已。
使用步骤
step1:导入jar包
step2:编写C3P0所要求的配置文件。连接数据库的4大信息是必须的(千万别写在源码中,而是写在配置文件中,读取配置文件也不是我们自己读了,而是C3P0来读,于是这就对配置文件有了要求)
C3P0对于配置文件的要求:
(1)文件名称 c3p0-config.xml
(2)文件放在src下
step3:创建出DataSource接口的实现类
 通过实现类的getConnection() 方法获取数据库连接对象,上述步骤的代码实现如下所示:

public class C3p0Utils {
    //3、创建出DataSource接口的实现类
    //之所以要把连接对象设置为类的静态成员,是因为该类只要进入到内存,就会优先加载其静态成员,于是就会创建接口DataSource的实现类的对象
    //该实现类的对象会自动的读取配置文件中的信息,有了该对象,就可以用来获取数据库连接对象了
    private static DataSource dataSource =  new ComboPooledDataSource(); //这个接口的实现类是直接new出来的,该接口是由C3P0实现的

    //提供方法,通过DataSource的实现类对象获取数据库连接对象,调用该方法,就能获取到数据库连接对象
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    //定义方法,获取DataSource接口实现类
    public static DataSource getDataSource(){
        return dataSource;
    }
}
public class TestC3p0 {
    public static void main(String[] args) throws SQLException {
        //测试C3P0连接池:通过工具类获取数据库连接对象
        Connection connection = C3p0Utils.getConnection();
        System.out.println(connection);

        //这里是中间操作:创建sql执行对象、执行sql···

        //释放资源:该数据库连接对象不会被销毁,而是又被放回到连接池中了
        connection.close();
    }
}

注意:C3P0连接池所用到的配置文件是xml格式的,且要保证固定的文件名和存放路径,不能出错,如下图所示:

<?xml version="1.0" encoding="utf-8" ?>
<!--配置数据库连接的4大信息-->
<c3p0-config>
    <!-- 使用默认的配置读取连接池对象 -->
    <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://ip:port/databasename</property>
        <property name="user">my_username</property>
        <property name="password">my_password</property>
        <!-- 连接池参数(可以不加,有默认数值,该参数主要由运营人员进行维护) -->
        <property name="initialPoolSize">5</property>
    </default-config>
</c3p0-config>

 

4 Druid 连接池的使用

阿里巴巴 Druid 数据库连接池
目的:从连接池中获取数据库连接对象
实现步骤:
step1:导入jar包
step2:把数据库连接4大信息放到properties文件中(名字随意,存储位置随意)
step3:创建DataSource接口实现类对象,调用对象方法获取数据库连接对象,上述步骤的代码实现如下所示:

public class DruidUtils {
    private static DataSource dataSource;
    static {
        //自己读取配置文件,用类加载器
        InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        //把流中的数据存到集合中
        Properties properties = new Properties();
        try {
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //创建DataSource接口实现类对象(通过工厂类获取,而不是直接new一个对象出来)
        try {
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //定义方法,获取连接对象
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }
}
public class TestDruid {
    public static void main(String[] args) throws SQLException {
        Connection connection = DruidUtils.getConnection();
        //测试:是否获取到数据库连接对象
        System.out.println(connection);
        //释放资源:把连接对象返还给连接池
        connection.close();
    }
}

注意:Druid连接池所用到的配置文件是properties格式的,无所谓文件名与路径,需要我们先自己读取该配置文件,然后把数据传给Druid,具体操作见上面的代码,配置文件内容如下(4个参数的key值是固定的,不能改名!如果改名了会报错,请注意):

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://ip:port/databasename
username=my_username
password=my_password

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值