• c3p0数据源的使用


    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等

    c3p0与dbcp区别:

    dbcp没有自动的去回收空闲连接的功能

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

    c3p0的实现由三种方式,

    一种手动在方法里添加数据库连接,即在setter方法里传数据库连接和配置的参数

    一种自定义properties文件或XML文件,配置相关数据库信息,然后手动解析

    一种定义默认的配置文件,properties文件为c3p0.properties,XML文件为c3p0-config.xml

    使用默认的配置文件c3p0会自动帮我们解析,只需把参数传入配置文件就可以使用了,相当方便

    这里简单介绍下第三种使用默认配置文件的用法,以xml文件为例

    配置文件c3p0-config.xml(只配置了一些必须的参数,更多可配置参数参看官方文档)

    <?xml version="1.0" encoding="UTF-8"?>
    <c3p0-config>
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/blogs_stu</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
        </default-config> 
        <named-config name="intergalactoApp">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/blogs_stu</property>
            <property name="user">root</property>
            <property name="password"></property>
            <property name="initialPoolSize">10</property>
            <property name="maxIdleTime">30</property>
            <property name="maxPoolSize">100</property>
            <property name="minPoolSize">10</property>
            <property name="maxStatements">200</property>
        </named-config>
    </c3p0-config>

    工具类C3P0Util

    public class C3P0Util {
        private static ComboPooledDataSource cpds=new ComboPooledDataSource();
        public static Connection getConnection(){
            try {
                return cpds.getConnection();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
        public static void release(Connection conn,Statement stmt,ResultSet rs){
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                conn=null;
            }
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                stmt=null;
            }
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                rs=null;
            }
        }
    }

    可以看到C3P03的使用相当简单

    打印通过c3p0方式获取的Connection对相关

    public class Test6{
        public static void main(String[] args) throws SQLException  {
            Connection conn=C3P0Util.getConnection();
            System.out.println(conn.getClass().getName());
        }

    通过名字容易发现,与dbcp的装饰模式不用,c3p0使用的方式是代理模式,通过代理类对close方法进行扩展,将不用的连接放回连接池中。

  • 相关阅读:
    html css 范畴
    mutation
    vue 应用vueqr生成二维码
    <ElDatePicker> at packages/datepicker/src/picker.vue
    uniapp 学习范畴
    yarn 带有^安装库文件
    finalshell 使用快捷操作
    packagelock.json作用是什么
    [七、媒体与动画]20截取一帧作为影片缩略图
    [七、媒体与动画]13使用UIImageView制作帧动画
  • 原文地址:https://www.cnblogs.com/pokid/p/5818933.html
Copyright © 2020-2023  润新知