数据连接池的原理就是解决多次连接数据库的性能损耗,建立一个pool,用来存储数据库连接,需要的时候直接从连接池获取,而不需要再次和数据库建立连接。
目前常用的数据连接池(简称数据源)有以下几种:
- DBCP
- DBCP2
- C3P0(有性能问题,不建议用)
- Druid(阿里数据源,推荐使用)
- Tomcat自带连接池
- WebLogic数据源
这里面我目前常用的是Druid,性能不错,而且自带监控功能,可以和Spring完整整合,监控sql执行性能,监控service的执行效率。
下面写一个方法来使用数据连接池,代码参见:com.critc.DataSourceTest
首先需要在pom.xml添加druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.25</version>
</dependency>
代码如下:
public class DataSourceTest {
public static void main(String[] args)throws Exception {
Hashtable<String, String> map = new Hashtable<String, String>();
map.put("driverClassName", "com.mysql.jdbc.Driver");
map.put("url", "jdbc:mysql://127.0.0.1/test");
map.put("username", "root");
map.put("password", "root");
map.put("initialSize", "2");
map.put("maxActive", "10");
DataSource dataSource = DruidDataSourceFactory.createDataSource(map);
long l = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
Connection conn = dataSource.getConnection();
conn.close();
}
System.out.println("连接池执行时间:" + (System.currentTimeMillis() - l));
long l2 = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
Connection conn = new JdbcTest().getConn();
conn.close();
}
System.out.println("JDBC连接执行时间:" + (System.currentTimeMillis() - l2));
}
}
可以看出使用连接池获取数据库连接的时间远远小于直接连接数据库。