美文网首页
C3P0&Druid 数据库连接池0606

C3P0&Druid 数据库连接池0606

作者: xiaoqiaobian | 来源:发表于2020-06-06 11:54 被阅读0次

    一、C3P0和Druid简介及概念

    c3p0是一个开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。
    这里需要的两个jar包分别是:c3p0-0.9.5.2.jar、mchange-commons-java-0.2.12.jar

    Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上。
    这里需要的两个jar包分别是:druid-1.0.9.jar、mysql-connector-java-5.1.37-bin.jar


    image.png

    二、C3P0

    -->c3p0-config.xml配置文件

    <c3p0-config>
      <!-- 使用默认的配置读取连接池对象 -->
      <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://192.168.53.133:3306/db14</property>
        <property name="user">root</property>
        <property name="password">xiaoqiaobian</property>
        
        <!-- 连接池参数 -->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">3000</property>
      </default-config>
    
      <named-config name="otherc3p0"> 
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db15</property>
        <property name="user">root</property>
        <property name="password">xiaoqiaobian</property>
        
        <!-- 连接池参数 -->
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">3000</property>
      </named-config>
    </c3p0-config>
    

    -->C3P0Test

    @author xiaoqiaobian
    package xiaoqiaobian2;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class C3P0Test1 {
        public static void main(String[] args) throws Exception {
            //1.创建c3p0的数据库连接池对象
            DataSource dataSource = new ComboPooledDataSource();
    
            //2.通过连接池对象获取数据库连接
            Connection con = dataSource.getConnection();
    
            //3.执行操作
            String sql = "SELECT * FROM student";
            PreparedStatement pst = con.prepareStatement(sql);
    
            //4.执行sql语句,接收结果集
            ResultSet rs = pst.executeQuery();
    
            //5.处理结果集
            while(rs.next()) {
                System.out.println(rs.getInt("sid") + "\t" + rs.getString("name") + "\t" + rs.getInt("age") + "\t" + rs.getDate("birthday"));
            }
    
            //6.释放资源
            rs.close();
            pst.close();
            con.close();
        }
    }
    

    三、Druid

    -->druid.properties配置文件

    @author xiaoqiaobian
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
          <!-- 基本属性 url、user、password -->
          <property name="url" value="${jdbc_url}" />
          <property name="username" value="${jdbc_user}" />
          <property name="password" value="${jdbc_password}" />
    
          <!-- 配置初始化大小、最小、最大 -->
          <property name="initialSize" value="1" />
          <property name="minIdle" value="1" /> 
          <property name="maxActive" value="20" />
    
          <!-- 配置获取连接等待超时的时间 -->
          <property name="maxWait" value="60000" />
    
          <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
          <property name="timeBetweenEvictionRunsMillis" value="60000" />
    
          <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
          <property name="minEvictableIdleTimeMillis" value="300000" />
    
          <property name="validationQuery" value="SELECT 'x'" />
          <property name="testWhileIdle" value="true" />
          <property name="testOnBorrow" value="false" />
          <property name="testOnReturn" value="false" />
    
          <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
          <property name="poolPreparedStatements" value="true" />
          <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    
          <!-- 配置监控统计拦截的filters -->
          <property name="filters" value="stat" /> 
    </bean>
    

    -->DruidTest1

    @author xiaoqiaobian
    package xiaoqiaobian2;
    
    import com.alibaba.druid.pool.DruidDataSourceFactory;
    import javax.sql.DataSource;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.Properties;
    /*
        1.通过properties集合,手动加载配置文件
        2.通过druid连接工场类获取数据库连接池对象
        3.通过连接池对象获取数据库连接并使用
    */
    public class DruidTest1 {
        public static void main(String[] args) throws Exception {
            //获取配置文件的流对象
            InputStream is = DruidTest1.class.getClassLoader().getResourceAsStream("druid.properties");
            //1.通过properties集合,手动加载配置文件
            Properties prop = new Properties();
            prop.load(is);
            //2.通过druid连接工场类获取数据库连接池对象
            DataSource dataSource=DruidDataSourceFactory.createDataSource(prop);
            //3.通过连接池对象获取数据库连接并使用
            Connection conn =dataSource.getConnection();
            System.out.println(conn);
            String sql = "SELECT * FROM student";
            PreparedStatement pstm = conn.prepareStatement(sql);
            //4.执行sql语句,接收结果集
            ResultSet rs = pstm.executeQuery();
            //5.处理结果集
            while(rs.next()) {
                System.out.println(rs.getInt("sid") + "\t" + rs.getString("name") + "\t" + rs.getInt("age") + "\t" + rs.getDate("birthday"));
            }
            //6.释放资源
            rs.close();
            pstm.close();
            conn.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:C3P0&Druid 数据库连接池0606

          本文链接:https://www.haomeiwen.com/subject/uhxxtktx.html