配置文件:jdbc.properties

username=root
password=kk
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://192.168.56.1:3306/test

initialSize=10
maxTotal=50
minIdle=5
maxWaitMillis=5000

测试文件:JDBCTest.java

import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.junit.Test;

public class JDBCTest {

  /*
    * 1、加载dbcp的properties配置文件:配置文件中的键需要来自BasicDataSource的属性
    * 2、调用BasicDataSourceFactory的createDataSource方法创建DataSource实例
    * 3、从DataSource获取数据库连接
    * */
   @Test
   public void testDBCPWithDataSourceFactory() throws Exception{
  
      Properties properties=new Properties();
      InputStream is=JDBCTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
      properties.load(is);
      DataSource ds=BasicDataSourceFactory.createDataSource(properties);
      System.out.println(ds.getConnection());
      //验证配置文件的属性
      BasicDataSource basicDataSource=(BasicDataSource) ds;
      System.out.println("最大等待时间:"+basicDataSource.getMaxWaitMillis());
   }

  //还有一种不用通过配置文件的方式如下单元测试方法:

  /*
    * 使用DBCP数据库连接池
    * 1、加入jar包
    * 2、创建数据库连接池
    * 3、设置数据源必须的属性
    * 4、从数据源中获取数据库连接
    * */
   @Test
   public void testDBCP() throws SQLException{
  
      //1、创建DBCP数据源实例 
      final BasicDataSource bds=new BasicDataSource();
  
      //2、为数据源实例指定必须的属性
      bds.setUsername("root");
      bds.setPassword("kk");
      bds.setUrl("jdbc:mysql:///test");
      bds.setDriverClassName("com.mysql.jdbc.Driver");
      /*
       * 3、指定数据源一些可选的属性
       *  1>指定数据库连接池中初始化连接数
       *  2>指定最大的连接数:同一时刻可以同时向数据库申请的连接数
       *  3>指定最小连接数:在数据库连接池空闲状态下,连接池中最少有多少个连接
       * */
      bds.setInitialSize(10);
      bds.setMaxTotal(3);
      bds.setMinIdle(2);
      //获取连接时的最大等待毫秒数
      bds.setMaxWaitMillis(1000*5);
      //4、从数据源获取数据库连接
      Connection con=bds.getConnection();
      System.out.println("1---》"+con);
      Connection con2=bds.getConnection();
      System.out.println("2---》"+con2);
      Connection con3=bds.getConnection();
      System.out.println("3---》"+con3);
  
      new Thread(){
         public void run() {
            Connection conn;
            try {
               conn=bds.getConnection();
               System.out.println("thread->"+conn.getClass());
            } catch (Exception e) {
     
            }
         };
      }.start();
  
      try {
         Thread.sleep(3000);
      } catch (InterruptedException e) {
         e.printStackTrace();
      }
        con2.close();
   }
}

<十三>JDBC_dbcp数据库连接池的更多相关文章

  1. JavaWeb学习总结(十三)--数据库连接池

    一.数据库连接池的概念 用池来管理Connection,这可以重复使用Connection.有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象.当使用完Co ...

  2. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...

  3. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  4. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  5. 数据库连接池c3p0学习

    这里只记录c3p0的数据源,不会涉及到其它方面和别的数据库连接池的对比 配置文件主要的实现方式有三种: 1.手写代码去加载一个配置文件 创建一个config.properties文件如下: drive ...

  6. <十四>JDBC_c3p0数据库连接池

    配置文件:c3p0-config.xml <!-- Hibernate官方推荐使用的数据库连接池即c3p0;dbcp是Tomcat在数据源中使用 --><c3p0-config> ...

  7. c3p0数据库连接池的使用详解

    首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...

  8. Mybatis-update - 数据库死锁 - 获取数据库连接池等待

    最近学习测试mybatis,单个增删改查都没问题,最后使用mvn test的时候发现了几个问题: update失败,原因是数据库死锁 select等待,原因是connection连接池被用光了,需要等 ...

  9. 从零开始学 Java - 数据库连接池的选择 Druid

    我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...

随机推荐

  1. DIV+CSS中标签dl dt dd常用的用法

    转自:http://smallpig301.blog.163.com/blog/static/9986093201010262499229/ < dl>< /dl>用来创建一个 ...

  2. 【python】tarfile的路径问题

    假设有路径/home/somebody/test1/test2/test3/ 该路径下有3个文件,a.txt, b.txt, c.txt 在目录/home/somebody下有如下代码,希望打包a.t ...

  3. MFC 静态文本的自绘 空心字的实现

    想在对话框里,显示几个字是很简单的,只要用静态文本的输出就可以了.然而有时候我们需要显示特效的字,我们希望显示的文字就像Word里的艺术字一样,看起来美观.这时我们可以重写CStatic类.用Draw ...

  4. My year of 2016

    2016, year of excellence.   Year of happiness. In Beijing we can also find some happiness which is s ...

  5. 1250 Super Fast Fourier Transform(湘潭邀请赛 暴力 思维)

    湘潭邀请赛的一题,名字叫"超级FFT"最终暴力就行,还是思维不够灵活,要吸取教训. 由于每组数据总量只有1e5这个级别,和不超过1e6,故先预处理再暴力即可. #include&l ...

  6. Java面试连环炮问题收集记录贴【JVM方面】

    写这类文章是为了记录下网上看到的/自己经历的一些一环扣一环的面试问题,一方面提高自己的理论知识,另外一方面也给自己去参加面试或面试他人提供点参考和帮助. 问题一: 为什么一个对象会被GC? 对象在进行 ...

  7. [MS SQL Server]SQL Server如何开启远程访问

    在日常工作中,经常需要连接到远程的MS SQL Server数据库中.当然也经常会出现下面的连接错误. 解决方法: 1. 设置数据库允许远程连接,数据库实例名-->右键--->属性---C ...

  8. BitHacks

    备份文件时看到的.我以前居然下过这东西. 2016-12-4 12:05:52更新 纯文本格式真棒.假如使用word写的我能拷过来格式还不乱?? Markdown真好. Bit Hacks By Se ...

  9. Web.xml配置参数详解

    1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的 ...

  10. PHP开发笔记:二维数组根据某一项来进行排序

    比如说我们现在有一个二维数组: $arr = array( ‘d' => array(‘id' => 5, ‘name' => 1, ‘age' => 7), ‘b' => ...