C3p0——数据库连接池

来源:互联网 发布:pl10空空导弹 知乎 编辑:程序博客网 时间:2024/05/18 01:47

  • 实现原理

C3p0官网

实现原理

ComboPooledDataSource dataSource = new ComboPooledDataSource();      dataSource.setDriverClass("com.mysql.jdbc.Driver");       dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/db_quartz");      dataSource.setUser("root");      dataSource.setPassword("");      // 可选项配置,如果不配置使用默认值      // 初始化时连接池中的连接池个数,默认为3,范围:[MinPoolSize,MaxPoolSize]      // 如果小于MinPoolSize就取MinPoolSize,如果大于MaxPoolSize就取MaxPoolSize      dataSource.setInitialPoolSize(8);      // 最小的连接数,默认为3      dataSource.setMinPoolSize(4);      // 当连接池中连接用完时,一次性增加的连接数,默认为3      dataSource.setAcquireIncrement(5);      // 最大的连接数,默认为15      dataSource.setMaxPoolSize(20);      // 最大的空闲时间,表示空闲连接的最大存活时间,默认为0,表示空闲连接永不过期,单位:秒      dataSource.setMaxIdleTime(5);      // 最开始池中的连接数为0,当使用dataSource变量之后线程池开始初始化      System.out.println("连接数:"+dataSource.getNumConnections());      //停止一段时间等待初始化连接      Thread.sleep(1000);      System.out.println("初始连接数:"+dataSource.getNumConnections());      Connection conn =dataSource.getConnection();      Connection conn2 =dataSource.getConnection();      System.out.println(MessageFormat.format("获取两个连接后,空闲的连接数:{0},正在使用的连接数:{1}",         dataSource.getNumIdleConnections(),        dataSource.getNumBusyConnections()));      for(int i=0;i<8-2;i++) {        Connection conn3 =dataSource.getConnection();      }      System.out.println(MessageFormat.format("获取InitialPoolSize连接后,空闲的连接数:{0},正在使用的连接数:{1}",         dataSource.getNumIdleConnections(),        dataSource.getNumBusyConnections()));      Connection conn3 =dataSource.getConnection();      //停止一段时间等待连接新建      Thread.sleep(1000);      System.out.println(MessageFormat.format("获取InitialPoolSize+1连接后,空闲的连接数:{0},正在使用的连接数:{1}",         dataSource.getNumIdleConnections(),        dataSource.getNumBusyConnections()));      for(int i=0;i<20-9;i++) {        Connection conn4 =dataSource.getConnection();      }      System.out.println(MessageFormat.format("获取MaxPoolSize连接后,空闲的连接数:{0},正在使用的连接数:{1}",         dataSource.getNumIdleConnections(),        dataSource.getNumBusyConnections()));      Connection conn5 =dataSource.getConnection();      //此时连接池中没有接连,线程会一直等待空闲线程的出现      System.out.println(MessageFormat.format("获取MaxPoolSize+1连接后,空闲的连接数:{0},正在使用的连接数:{1}",         dataSource.getNumIdleConnections(),        dataSource.getNumBusyConnections()));

运行结果:

连接数:0初始连接数:8获取两个连接后,空闲的连接数:6,正在使用的连接数:2获取InitialPoolSize连接后,空闲的连接数:0,正在使用的连接数:8获取InitialPoolSize+1连接后,空闲的连接数:4,正在使用的连接数:9获取MaxPoolSize连接后,空闲的连接数:0,正在使用的连接数:20
原创粉丝点击