本仙又更博了,我是勤劳的小蜜蜂~
1 DBCP简介
DBCP(DataBase connection pool):
DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。
由于建立数据库连接是一个非常耗时的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
好,接下来请和本仙一起来体验一下DBCP的使用,这回是手把手的教呦~
2 使用步骤
2.1 创建项目
本仙使用的是IDEA,个人觉得创建项目常规操作,略过.
2.2 导入相关的jar包:
导入下图所示的四个jar包,commons-dbcp2-2.1.1.jar和commons-pool2-2.4.2.jar是单独使用DBCP是比加的两个包,然后commons-logging-1.2.jar是日志支持jar包,mysql-connector-java-5.1.41-bin.jar(mysql-connector-java-5.1.41.jar都可以)是连接数据库驱动jar包,本篇博客中不再进行数据库增删改查的操作,可以不加,因为习惯问题,我加上了~哈哈.
如果你没有这几个jar包的话:点击进入下载传送门:
![DBCP需要引入的jar包 DBCP需要引入的jar包]()
想要去使用DBCP那我们就要对它的属性们进行一个初始化的设置,本篇博客中只举简单的例子,不再进行数据库增删改查的操作,上一篇博客(*数据库连接池之自定义连接池*)中有相关的操作,可以去那里查看呦.
2.3 DBCP初始化
2.3.1 通过硬编码初始化DBCP
通过硬编码直接初始化DBCP:就是在静态代码块中将要使用的属性(只列举部分)直接进行初始化赋值操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   | public class DBCP { 	     public static BasicDataSource dataSource;
           static {                  dataSource = new BasicDataSource();                  dataSource.setDriverClassName("com.mysql.jdbc.Driver");         dataSource.setUrl("jdbc:mysql://localhost:3306/mydatabase");         dataSource.setUsername("root");         dataSource.setPassword("123456789");                  dataSource.setInitialSize(10);                  dataSource.setMaxTotal(50);                  dataSource.setMaxIdle(20);                  dataSource.setMinIdle(5);                  dataSource.setMaxWaitMillis(6000);     } }
  | 
 
2.3.2 通过软编码初始化DBCP
通过软编码初始化DBCP:就是通过配置文件(dbcp.properties)对相关的基本属性进行设置,通过加载配置文件来初始化DBCP:
在配置文件中有一个点需要注意一下:属性的命名是有约束的,必须是小驼峰(第一个单词首字母小写,后面单词首字母大写)命名,而且要和setXxxx()方法中的Xxxx保持一致;
如:
    在.java文件中有一个方法是获取数据库用户名:dataSource.setUsername(“root”);
    那么在配置文件中获取数据库用户名应该为:username = root
先献上配置文件:dbcp.properties
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   |  driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///mydatabase username=root password=123456789
  initialSize=10
  maxTotal=50
  maxIdle=20
  minIdle=5
  maxWaitMillis=6000
 
  | 
 
DBCP.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | public class DBCP {     public static BasicDataSource dataSource;
           static {                  try {         	             Properties properties = new Properties();                          InputStream inputStream = DBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");             properties.load(inputStream);             dataSource = BasicDataSourceFactory.createDataSource(properties);         } catch (Exception e) {             e.printStackTrace();         }     } }
  | 
 
2.4 通过DBCP获取数据库连接
1 2 3 4 5 6 7 8 9 10 11 12
   | public class DBCP {           public static Connection getConnection() {         try {         	             return dataSource.getConnection();         } catch (SQLException e) {             e.printStackTrace();         }         return null;     } }
  | 
 
2.5 关闭连接
注意:我们这里的关闭连接并不是真的关闭了数据库连接,而是将连接回收,重新放入了DBCP中,和我们自定义写的数据库连接池不一样的欧~关的顺序问题我就不再强调了,本仙女的记忆方式,后开的先关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | public class DBCP {          public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {         try {             if (resultSet != null) {                 resultSet.close();             }             if (statement != null) {                 statement.close();             }             if (connection != null) {                 connection.close();             }         } catch (SQLException e) {             e.printStackTrace();         }     } }
  | 
 
2.6 测试DBCP
就这么写完了当然要测试一下,那我就简单的用Junit测试一下,顺便带上测试结果,方便您理解这个过程:
测试代码:
1 2 3 4 5 6 7 8 9 10 11
   | @Test     public void DBCPTest() {                  for (int i = 0; i < 51; i++) {             Connection connection = DBCP.getConnection();             System.out.println(connection.toString() + "\n------------------------------------");                                       DBCP.closeAll(connection, null, null);         }     }
   | 
 
测试结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
   | com.myproject.test.TestAll,DBCPTest 1740035246, URL=jdbc:mysql: ------------------------------------ 913190639, URL=jdbc:mysql: ------------------------------------ 1018937824, URL=jdbc:mysql: ------------------------------------ 1915058446, URL=jdbc:mysql: ------------------------------------ 922151033, URL=jdbc:mysql: ------------------------------------ 1387228415, URL=jdbc:mysql: ------------------------------------ 748658608, URL=jdbc:mysql: ------------------------------------ 167185492, URL=jdbc:mysql: ------------------------------------ 1937348256, URL=jdbc:mysql: ------------------------------------ 1358444045, URL=jdbc:mysql: ------------------------------------ 331844619, URL=jdbc:mysql: ------------------------------------ 64830413, URL=jdbc:mysql: ------------------------------------ 653687670, URL=jdbc:mysql: ------------------------------------ 2136344592, URL=jdbc:mysql: ------------------------------------ 329611835, URL=jdbc:mysql: ------------------------------------ 863831416, URL=jdbc:mysql: ------------------------------------ 1638172114, URL=jdbc:mysql: ------------------------------------ 1651945012, URL=jdbc:mysql: ------------------------------------ 1007251739, URL=jdbc:mysql: ------------------------------------ 194494468, URL=jdbc:mysql: ------------------------------------ 853993923, URL=jdbc:mysql: ------------------------------------ 1702146597, URL=jdbc:mysql: ------------------------------------ 591723622, URL=jdbc:mysql: ------------------------------------ 95395916, URL=jdbc:mysql: ------------------------------------ 1778535015, URL=jdbc:mysql: ------------------------------------ 24433162, URL=jdbc:mysql: ------------------------------------ 519821334, URL=jdbc:mysql: ------------------------------------ 1307096070, URL=jdbc:mysql: ------------------------------------ 2081303229, URL=jdbc:mysql: ------------------------------------ 1076835071, URL=jdbc:mysql: ------------------------------------ 1525262377, URL=jdbc:mysql: ------------------------------------ 1418428263, URL=jdbc:mysql: ------------------------------------ 1836643189, URL=jdbc:mysql: ------------------------------------ 1597462040, URL=jdbc:mysql: ------------------------------------ 853119666, URL=jdbc:mysql: ------------------------------------ 1144648478, URL=jdbc:mysql: ------------------------------------ 600746945, URL=jdbc:mysql: ------------------------------------ 1458849419, URL=jdbc:mysql: ------------------------------------ 981661423, URL=jdbc:mysql: ------------------------------------ 1681595665, URL=jdbc:mysql: ------------------------------------ 57494364, URL=jdbc:mysql: ------------------------------------ 1374677625, URL=jdbc:mysql: ------------------------------------ 963269035, URL=jdbc:mysql: ------------------------------------ 2140832232, URL=jdbc:mysql: ------------------------------------ 1659791576, URL=jdbc:mysql: ------------------------------------ 1483022288, URL=jdbc:mysql: ------------------------------------ 1410986873, URL=jdbc:mysql: ------------------------------------ 221036634, URL=jdbc:mysql: ------------------------------------ 1418370913, URL=jdbc:mysql: ------------------------------------ 2081853534, URL=jdbc:mysql: ------------------------------------ 710714889, URL=jdbc:mysql: ------------------------------------ Process finished with exit code 0
   | 
 
看到这里你明白DBCP是怎么实现的了吗?
最后,小仙?在这里感谢您看到最后,有收获的话给本仙鱼点个赞吧~
有问题留言呦,再见祝您生活愉快