【JDBC】1.连接池DataSource/Connection Pool

1. 为什么必须使用数据库连接池:

    普通的 JDBC 数据库连接 (Connectiond 对象) 使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证用户名和密码(得花费 0.05s~1s 的时间), 数据库的连接是比较昂贵的(创建的成本比较大)。

    需要数据库连接的时候,就向数据库要求一个,执行完成后再断开连接。这样的方式将会消耗大量的资源和时间。

    数据库的连接资源并没有得到很好的重复利用. 若同时有几百人甚至几千人在线,频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器的崩溃。

2. 在 Java 中, 连接池使用 javax.sql.DataSource 接口来表示连接池.

DataSource(数据源)和连接池 (Connection Pool) 是同一个.

注意:DataSource 仅仅只是一个接口, 由各大服务器厂商来实现 (Tomcat,JBoss).

常用的 DataSource 的实现:

  DBCP:  Spring 框架推荐的

  C3P0:  Hibernate 框架推荐的

  druid: 阿里巴巴的连接池 (号称 Java 语言中性能最好的连接池).

3. 使用连接池和不使用连接池的区别在哪里? 如何获取 Connection 对象:

没有使用连接池:Connection conn = DriverManager.getConnection(url,username,password);

使用连接池:Connection conn = DataSource 对象.getConnection();

  只要获取了 Connection 对象, 接下来的操作和以前是一模一样的.

  关键在于: 如何创建 DataSource 对象.

4. 如何释放 Connection 对象 (Connection 对象.close()):

没有使用连接池: 是和数据库服务器断开.

使用连接池: 是把 Connection 对象返还给连接池中, 并没有和数据库服务器断开.

Java 中数据库连接池原理机制的详细讲解 

可以参考看下。