前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用idea配置c3p0连接池「建议收藏」

用idea配置c3p0连接池「建议收藏」

作者头像
全栈程序员站长
发布2022-06-27 11:10:57
7690
发布2022-06-27 11:10:57
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

文章目录

前言

上次利用c3p0封装了数据库操作工具类,但没有用到连接池,在处理大数据量访问的时候那种方法事不好的,最好使用连接池,本文将配置连接池的源码贴出。 欢迎收藏米奇罗的博客

1. 准备

下载的包均是此时最新包

2. c3p0连接池配置

  • 添加依赖

将包导入,并添加依赖。如下图操作即可

这几个包必须要
这几个包必须要
  • 创建c3p0-config.xml

在src文件夹下创建c3p0-config.xml,文件名不能改,只能是这个。 配置源码如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- This is default config! -->
    <default-config>
        <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>

    <!-- This is my config for mysql-->
    <named-config name="mysql">
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/bigtest?serverTimezone=GMT</property>
        <!--MySQL账户密码-->
        <property name="user">root</property>
        <property name="password">rootroot</property>
        <!-- 初始化连接池中的连接数,取值应在minPoolSize与maxPoolSize之间,默认为3-->
        <property name="initialPoolSize">10</property>
        <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->
        <property name="maxIdleTime">30</property>
        <!--连接池中保留的最大连接数。默认值: 15 -->
        <property name="maxPoolSize">100</property>
        <!-- 连接池中保留的最小连接数,默认为:3-->
        <property name="minPoolSize">10</property>
        <!--c3p0全局的PreparedStatements缓存的大小。如果maxStatements与maxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->
        <property name="maxStatements">200</property>
        <!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->

        <!--这种写法也可以
        <property name="checkoutTimeout" value="3000"/>
        -->
        <property name="checkoutTimeout">3000</property>
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->
        <!--
        <property name="acquireIncrement" value="2"/>
        -->
        <property name="acquireIncrement">2</property>
        <!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->
        <!--
        <property name="acquireRetryAttempts" value="0"/>
        -->
        <property name="acquireRetryAttempts">0</property>
        <!--重新尝试的时间间隔,默认为:1000毫秒-->
        <!--
        <property name="acquireRetryDelay" value="1000" />
        -->
        <property name="acquireRetryDelay">1000</property>
        <!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->
        <property name="autoCommitOnClose">false</property>
        <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->
        <property name="automaticTestTable">Test</property>
        <!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->
        <property name="breakAfterAcquireFailure">false</property>
        <!--每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->
        <property name="idleConnectionTestPeriod">60</property>
        <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->
        <property name="maxStatementsPerConnection">200</property>
    </named-config>


    <!-- This is my config for oracle
    <named-config name="oracle">
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="user">scott</property>
        <property name="password">liang</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>

3. JDBC连接

创建JDBCUtil.java 源码如下:

代码语言:javascript
复制
package com.maolin;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;

public class JDBCUtil { 
   

    private static DataSource dataSource=null;
    static{ 
   
        dataSource=new ComboPooledDataSource("mysql");
    }

    /** * 获取数据库连接 * @return */
    public static Connection getConnection(){ 
   
        Connection conn=null;
        try { 
   
            conn=dataSource.getConnection();
        } catch (SQLException e) { 
   
            e.printStackTrace();
        }
        return conn;
    }


    /** * 关闭数据库连接 * @param conn */
    public static void closeConn(Connection conn){ 
   
        try { 
   
            if(conn!=null && conn.isClosed()){ 
   
                conn.close();
            }
        } catch (SQLException e) { 
   
            e.printStackTrace();
        }
    }
}

4. 测试

测试:TestJdbc.java

代码语言:javascript
复制
package com.maolin;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.maolin.JDBCUtil;

public class TestJdbc { 
   
public static void main(String[] args){ 
   
        Connection conn=JDBCUtil.getConnection();
        System.out.println(conn);
        try { 
   
            PreparedStatement stmt=conn.prepareStatement("select * from member");
            ResultSet re=stmt.executeQuery();
            while(re.next()){ 
   
                String name=re.getString(3);
                System.out.println(name);
            }
        } catch (SQLException e) { 
   
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

5. 小结

虽然这个看起来不难,但如果不仔细研究,最后还是弄不出来,差点就放弃了,不过最后还是弄出来了,蛮开心的。 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133235.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年6月9,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 1. 准备
  • 2. c3p0连接池配置
  • 3. JDBC连接
  • 4. 测试
  • 5. 小结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档