前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mysql -- 配置C3P0

Mysql -- 配置C3P0

作者头像
晚上没宵夜
发布2020-03-10 09:16:55
7800
发布2020-03-10 09:16:55
举报
文章被收录于专栏:Howl同学的学习笔记

1. 需要导入的包

  • c3p0-0.9.5.2.jar
  • mchange-commons-0.2.15.jar
  • mysql-connector.jar

2. 配置xml

创建c3p0-config.xml文件,名字不能改动,并且放到src下,c3p0包会自动到src下查找c3p0-config.xml,名字错了,地方不对都不能配置成功

配置

代码语言:javascript
复制
<c3p0-config>
    <!-- 默认配置,如果没有指定使用则使用这个配置 -->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name="user">root</property>
        <property name="password"></property>
        <property name="checkoutTimeout">30000</property>
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">40</property>
        <property name="minPoolSize">30</property>
        <property name="maxPoolSize">50</property>
        <property name="maxStatements">200</property>
        <property name="maxStatementsPerConnection">20</property>
    </default-config>
    
    <!-- 自定义配置  -->
    <named-config name="Howl">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/zero_demo</property>
        <property name="user">root</property>
        <property name="password"></property>
        <property name="checkoutTimeout">30000</property>
        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">40</property>
        <property name="minPoolSize">30</property>
        <property name="maxPoolSize">50</property>
        <property name="maxStatements">200</property>
        <property name="maxStatementsPerConnection">20</property>
    </named-config>
</c3p0-config>

或者到官网查看标准配置 C3P0

3. C3P0Util工具类

代码语言:javascript
复制
public class C3P0Util {
    
    // num = 1 使用默认的
    private static ComboPooledDataSource comboPooledDataSourceDefault = new ComboPooledDataSource();
    // num = 2 使用自定义的
    private static ComboPooledDataSource comboPooledDataSourceMydefine = new ComboPooledDataSource("Howl");
    
    public static Connection getConnection(int num){
        try {
            if(num == 1){
                return comboPooledDataSourceDefault.getConnection();
            }else if(num == 2){
                return comboPooledDataSourceMydefine.getConnection();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

4. 测试

代码语言:javascript
复制
public class Test {
    
    public static void main(String[] args) throws SQLException {

        // 分别在两个不同的库设计了一张表,数据不同
        String sql = "SELECT * FROM user";
        
        // 使用默认数据源
        Connection connOne = C3P0Util.getConnection(1);
        PreparedStatement psOne = connOne.prepareStatement(sql);
        ResultSet rsOne = psOne.executeQuery();
        while(rsOne.next()){
            System.out.println(rsOne.getString("username"));
        }
        connOne.close();

        System.out.println("-------人工分割线-------");
        
        // 使用自定义的数据源
        Connection connTwo = C3P0Util.getConnection(2);
        PreparedStatement psTwo = connTwo.prepareStatement(sql);
        ResultSet rsTwo = psTwo.executeQuery();
        while(rsTwo.next()){
            System.out.println(rsTwo.getString("username"));
        }
        connTwo.close();
    }
}

输出结果

代码语言:javascript
复制
Howl
-------人工分割线-------
123123

5. 验证

验证Close方法在连接池中是归还给池,而不是关闭

代码语言:javascript
复制
public static void main(String[] args) throws SQLException {
    
    // 循环获取40个连接,输出其地址,然后关闭连接
    // 若关闭之后,再获取的连接地址有重复,则说明该连接没有被真正关闭,而是归还到连接池
    // 这里的关闭函数被c3p0动态代理了,被改写为放入连接池
    for(int i = 0; i < 40;i++) {
         Connection conn = C3P0Util.getConnection(1);
         System.out.println(conn);
         conn.close();
    }
}
代码语言:javascript
复制
// 列出部分,可以看到地址重复,验证正确
com.mchange.v2.c3p0.impl.NewProxyConnection@6aaa5eb0 [wrapping: com.mysql.jdbc.JDBC4Connection@50cafc0a]
com.mchange.v2.c3p0.impl.NewProxyConnection@1a407d53 [wrapping: com.mysql.jdbc.JDBC4Connection@68c80b21]
com.mchange.v2.c3p0.impl.NewProxyConnection@5ebec15 [wrapping: com.mysql.jdbc.JDBC4Connection@50cafc0a]
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 需要导入的包
  • 2. 配置xml
  • 3. C3P0Util工具类
  • 4. 测试
  • 5. 验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档