MySQL:定义数据库连接池(C3P0,DBCP)工具类,可用于IOC容器

自定义了一个数据库连接池工具类,此类主要有以下功能:

  • 管理C3p0 、DBCP两种类型的数据库连接池;
  • 分别把C3p0 、DBCP两个数据库连接池封装到JdbcTemplate包装类中,并返回;
  • 可分别从C3p0 、DBCP两个数据库连接池中得到数据库连接对象Connection;
  • 可用于在IOC容器中,采了静态工厂的方式,创建C3p0 、DBCP两个数据库连接池的Bean,且都为单例;

一、具体实现代码:

    // TODO: 2021/7/10 采取c3p0的数据连接池
    private static ComboPooledDataSource dataSource;
    // TODO: 2021/7/10 采取DBCP的数据连接池
    private static BasicDataSource basicDataSource;

    // TODO: 2021/7/11 这两个连接池用于IOC容器中
    private static ComboPooledDataSource dataSourceC3p0Ioc = null;
    private static BasicDataSource dataSourceDbcpIoc = null;

    // TODO: 2021/7/11 创建数据库连接池,使在这个数库连接池在IOC容器中永远是单例,在IOC窗口中采取静态的方法创建了普瑞不能Bean
    public static DataSource createC3p0DataSourceIoc(String configName){
        if (dataSourceC3p0Ioc == null) {
            ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(configName);
            dataSourceC3p0Ioc = comboPooledDataSource;
            return comboPooledDataSource;
        }else{
            return dataSourceC3p0Ioc;
        }
    }

    public static DataSource createDbcpDatasourceIoc(String propertiesName) throws Exception {
        if (dataSourceDbcpIoc == null) {
            InputStream resourceAsStream = BasicDataSource.class.getClassLoader().getResourceAsStream(propertiesName);
            Properties properties = new Properties();
            properties.load(resourceAsStream);
            BasicDataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
            dataSourceDbcpIoc = dataSource;
            return dataSource;
        }else {
            return dataSourceDbcpIoc;
        }
    }

    // TODO: 2021/7/10 静态代码块,在工具类中创一个c3p0数据库连接池,连接配置文件名为:c3p0-config.xml
    static {
        ComboPooledDataSource jdbcConfig = new ComboPooledDataSource();
        dataSource = jdbcConfig;
    }

    // TODO: 2021/7/10 静态代码块中为采取 DBCP数据库连接池,加载的是属性properties文件,属性文件命名需按照一定的规则
    static {
        Properties properties = new Properties();
        InputStream resourceAsStream = BasicDataSource.class.getClassLoader().getResourceAsStream("dbcp4.properties");
        try {
            properties.load(resourceAsStream);
            BasicDataSource basicData = BasicDataSourceFactory.createDataSource(properties);
            basicDataSource = basicData;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // TODO: 2021/7/10 从c3p0数据库连接池中得到一个连接
    public static Connection getConnectionc3p0() throws SQLException {
        return dataSource.getConnection();
    }

    // TODO: 2021/7/10 从dbcp数据库连接池中得到一个连接
    public static Connection getConnectionDbcp() throws SQLException {
        return basicDataSource.getConnection();
    }

    // TODO: 2021/7/10 对连接进行关闭
    public static void release(Connection conn) {
        try {
            conn.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }


    // TODO: 2021/7/11 返回一个c3p0数据库连接池的包装类JdbcTemplate
    public static JdbcTemplate getJdbcTemplateC3p0(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        return jdbcTemplate;
    }

    // TODO: 2021/7/11 返回一个JdbcTemplate包装类对象,被封装的数据库连接池为DBCP连接池
    public static JdbcTemplate getJdbcTemplateDbcp(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(basicDataSource);
        return jdbcTemplate;
    }

二、C3p0数据库连接池配置文件c3po-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- TODO: 此文件必须命名为: c3p0-confing.xml-->
<c3p0-config>
    <!-- TODO:此处为给此文件命名为:jdbcConfig,在创建c3p0数据库连接池时,可以通过此名来加载引xml文件 -->
    <named-config name="jdbcConfig">
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=false&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>

        <!-- 当连接数量用尽时,可定期的增量数 -->
        <property name="acquireIncrement">10</property>
        <!-- 数据库初始化时,需要初始化连接池中连接的数量 -->
        <property name="initialPoolSize">100</property>
        <!-- 连接池的最小连接数 -->
        <property name="minPoolSize">10</property>
        <!-- 连接池的最大连接数 -->
        <property name="maxPoolSize">200</property>
        <!-- 连接池中 Statement 的最大个数 -->
        <property name="maxStatements">20</property>
        <!-- 连接池中每个连接可以同时使用的 Statement 的个数 -->
        <property name="maxStatementsPerConnection">5</property>
    </named-config>

    <default-config>
        <!-- TODO:这个地方可以写默认的c3p0数据库连接池配置文件 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=false&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>

        <!-- 当连接数量用尽时,可定期的增量数 -->
        <property name="acquireIncrement">10</property>
        <!-- 数据库初始化时,需要初始化连接池中连接的数量 -->
        <property name="initialPoolSize">100</property>
        <!-- 连接池的最小连接数 -->
        <property name="minPoolSize">10</property>
        <!-- 连接池的最大连接数 -->
        <property name="maxPoolSize">200</property>
        <!-- 连接池中 Statement 的最大个数 -->
        <property name="maxStatements">20</property>
        <!-- 连接池中每个连接可以同时使用的 Statement 的个数 -->
        <property name="maxStatementsPerConnection">5</property>
    </default-config>

</c3p0-config>

三、DBCP数据库连接池properties配置文件

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb?serverTimezone=UTC&useSSL=false
username=root
password=123456

maxTotal:100
initialSize:10
maxWait:60000
minIdle:10
maxIdle:15

logAbandoned:true
removeAbandoned:true
removeAbandonedTimeout:10
timeBetweenEvictionRunsMillis:10000
numTestsPerEvictionRun:10
minEvictableIdleTimeMillis:10000
validationQuery:SELECT 1 FROM DUAL

#\u6821\u9A8C\u94FE\u63A5
testWhileIdle:true
testOnBorrow:true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值