1.介绍:

Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。

2.可以做什么:

  • 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  • 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  • 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  • 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

3.地址:

  1. Druid官方地址:https://github.com/alibaba/druid
  2. jar包下载地址:http://repo1.maven.org/maven2/com/alibaba/druid/(虽然看起来很low但是的确是下载的地址……)
  3. 常见问题:https://github.com/alibaba/druid/wiki/FAQ

4.具体配置步骤:

      1.Druid 0.1.18 之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xml中加上dependency就可以了。1.1.9版本依赖如下:

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid</artifactId>

    <version>1.1.9</version>

</dependency>

      2.编写配置文件,文件名:db_server.properties

      3.配置文件内容:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/dbName?characterEncoding=utf-8
username=yourName
password=yourPassword
filters=stat,wall,log4j
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=true
maxPoolPreparedStatementPerConnectionSize=20
slowSqlMillis=10000

      配置文件的参数详情,可以通过此链接了解:

      也可以选择Maven仓库查找公共的仓库地址:http://www.mvnrepository.com/artifact/com.alibaba/druid

5.配置StatViewServlet配置:

      德鲁伊内置提供了一个StatViewServlet用于展示德鲁伊的统计信息。

      这个StatViewServlet的用途包括:

  • 提供监控信息展示的HTML页面
  • 提供监控信息的JSON API

      注意:使用StatViewServlet,建议使用druid 0.2.6以上版本。

5.1配置web.xml:

      StatViewServlet是一个标准的javax.servlet.http.HttpServlet,需要配置在你的Web应用中的WEB-INF / web.xml文件中。

<servlet>
      <servlet-name>DruidStatView</servlet-name>
      <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>DruidStatView</servlet-name>
      <url-pattern>/druid/*</url-pattern>
  </servlet-mapping>

      根据配置中的URL模式来访问内置监控页面,如果是上面的配置,内置监控页面的首页是/druid/index.html

      例如:http://localhost:8080/druid/index.html

5.1.1配置监控页面访问密码:

需要配置的Servlet的loginUsername状语从句:loginPassword这两个初始参数。

      具体可以参考:

      示例如下:

<!-- 配置 Druid 监控信息显示页面 -->  
<servlet>  
    <servlet-name>DruidStatView</servlet-name>  
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>  
    <init-param>  
	<!-- 允许清空统计数据 -->  
	<param-name>resetEnable</param-name>  
	<param-value>true</param-value>  
    </init-param>  
    <init-param>  
	<!-- 用户名 -->  
	<param-name>loginUsername</param-name>  
	<param-value>druid</param-value>  
    </init-param>  
    <init-param>  
	<!-- 密码 -->  
	<param-name>loginPassword</param-name>  
	<param-value>druid</param-value>  
    </init-param>  
</servlet>  
<servlet-mapping>  
    <servlet-name>DruidStatView</servlet-name>  
    <url-pattern>/druid/*</url-pattern>  
</servlet-mapping>

6.Servlet 3.0的配置:

      Servlet 3.0 之后可以使用注解来配置 Servlet Filter Listener等Java Web组件

      Servlet 3.0的注解支持 在web.xml中是可以设置的 web.xml的顶层标签 < web-app > 有一个 metadata-complete 属性 设置为false时则启用注解和web插件支持

      true时则只初始化web.xml配置中的内容 , 默认当然是false 也就是启用注解和插件支持

6.1@WebInitParam注解:

该注解通常不单独使用,而是配合 @WebServlet 或者 @WebFilter 使用。它的作用是为 Servlet 或者过滤器指定初始化参数,这等价于 web.xml 中 < servlet> 和 < filter> 的 < init-param> 子标签。

6.2@WebInitParam注解的常用属性:

属性名

类型

是否可选

描述

name

String

指定参数的名字,等价于 < param-name>。

value

String

指定参数的值,等价于 < param-value>。

description

String

关于参数的描述,等价于 < description>。

这个标签是和@WebServlet 或者 @WebFilter 配合使用的,比如 使用阿里巴巴的Druid数据库连接池时
配置管理界面时,配置Druid的登

@WebServlet(urlPatterns = "/druid/*",
        initParams={
  @WebInitParam(name="allow",value=""),// IP白名单 (没有配置或者为空,则允许所有访问)
  @WebInitParam(name="loginUsername",value="admin"),// 用户名
  @WebInitParam(name="loginPassword",value="admin"),// 密码
  @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
  }) public class DruidStatViewServlet extends StatViewServlet { }

配置管理界面时,配置Druid的登录和管理界面

从上可知 @WebInitParam是编写在@WebServler注解的initParam标签之中的,Druid的资源过滤器

@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
        initParams={
  @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")
  // 忽略资源
  }) public class DruidFilter extends WebStatFilter { }

同样 @WebInitParam也可以编写在@WebFilter注解的initParam标签之中的