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.地址:
- Druid官方地址:https://github.com/alibaba/druid
- jar包下载地址:http://repo1.maven.org/maven2/com/alibaba/druid/(虽然看起来很low但是的确是下载的地址……)
- 常见问题: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标签之中的