Druid连接池是阿里巴巴开源的一款基于JDBC规范的高性能连接池。它支持MySQL, PostgreSQL, Oracle, DB2, Microsoft SQL Server等数据库,而且Druid提供了监控功能,可以监控连接池的状态。下面将详细介绍Druid连接池的使用及其特点。
一、引入Druid依赖
在Maven工程中,只需要在pom.xml中引入Druid的依赖即可:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
二、配置Druid连接池
Druid连接池的配置可以通过配置文件或者代码进行配置。配置项包括:数据库URL、用户名、密码、连接池大小、连接等待超时时间、最小空闲连接数、最大活动连接数、验证连接的查询语句、连接回收时间等等。这里以配置文件的方式进行介绍。
在src/main/resources目录下创建druid.properties文件,并添加以下内容:
#数据库连接信息
url=jdbc:mysql://localhost:3306/test
username=root
password=root
#初始化连接数
initialSize=5
#最大连接数
maxActive=20
#最小连接数
minIdle=2
#获取连接时最大等待时间,单位毫秒
maxWait=60000
#间隔多久进行检测,关闭空闲连接,单位毫秒
timeBetweenEvictionRunsMillis=60000
#检测连接是否有效的SQL语句
validationQuery=SELECT 'x'
#超过时间限制是否回收
removeAbandoned=true
#超过时间限制多少秒 进行回收
removeAbandonedTimeoutMillis=1800000
#在空闲时检查有效性
testWhileIdle=true
#每个连接的最大存活时间,单位毫秒
maxEvictableIdleTimeMillis=300000
#连接池中同时最大的活跃连接数
maxPoolPreparedStatementPerConnectionSize=20
三、创建Druid连接池
在Java代码中,创建Druid连接池很简单,只需要调用DruidDataSource的静态方法即可:
public class DBHelper {
private static DruidDataSource dataSource;
static {
try {
//加载属性文件
Properties properties = new Properties();
properties.load(DBHelper.class.getClassLoader().getResourceAsStream("druid.properties"));
//创建数据源
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
//关闭连接池
public static void close() {
if (dataSource != null) {
dataSource.close();
}
}
}
四、使用Druid连接池
获取Druid连接池的连接,就跟普通的JDBC连接一样,只需要调用getConnection方法即可:
Connection conn = DBHelper.getConnection();
五、监控Druid连接池
Druid连接池提供了一个内置的监控功能,可以通过配置相关参数,将监控信息输出到指定的路径或者通过HTTP/REST接口暴露出来以便查看。可以通过以下两种方式打开Druid的监控功能:
(1)配置Filter方式:
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
(2)配置Servlet方式:
<servlet>
<servlet-name>DruidStatViewServlet</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
<init-param>
<param-name>loginUsername</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>loginPassword</param-name>
<param-value>admin</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatViewServlet</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
以上两种方式需要在web.xml中进行配置。
Druid连接池的特点:
(1)高可靠性:Druid连接池经过多个生产环境的验证,稳定性非常高。
(2)高性能:Druid连接池采用了优秀的设计,具有高效的连接池管理机制、防止SQL注入、批量操作和分页查询优化等特性,可以大量减少数据库连接池内部对象创建、销毁和垃圾回收的开销。
(3)功能丰富:Druid连接池提供了监控、防火墙、统计和缓存等强大功能,能够满足各种数据访问的需求。
(4)易于使用:Druid连接池可以通过简单的配置,就可以实现高性能的数据库连接池,而且易于集成到各种应用中。