Druid号称是Java语言中最好的数据库连接池。

1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

2) 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

5) 能够提供基于Filter-Chain模式的插件体系。

下面介绍下如何在项目中集成Druid:

1、maven依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>druid</artifactId>
  4. <version>${druid-version}</version>
  5. </dependency>

2、配置web.xml

  1. <!-- druid -->
  2. <servlet>
  3. <servlet-name>DruidStatView</servlet-name>
  4. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>DruidStatView</servlet-name>
  8. <url-pattern>/druid/*</url-pattern>
  9. </servlet-mapping>
  10. <filter>
  11. <filter-name>DruidWebStatFilter</filter-name>
  12. <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
  13. <init-param>
  14. <param-name>exclusions</param-name>
  15. <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
  16. </init-param>
  17. </filter>
  18. <filter-mapping>
  19. <filter-name>DruidWebStatFilter</filter-name>
  20. <url-pattern>/*</url-pattern>
  21. </filter-mapping>

3、spring.xml中配置druid数据源

  1. <!-- 数据源druid -->
  2. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  3. init-method="init" destroy-method="close">
  4. <property name="driverClassName" value="${jdbc.driverClassName}" />
  5. <property name="url" value="${jdbc.url}" />
  6. <property name="username" value="${jdbc.username}" />
  7. <property name="password" value="${jdbc.password}" />
  8. <!-- 配置初始化大小、最小、最大 -->
  9. <property name="initialSize" value="${druid.pool.size.init}" />
  10. <property name="minIdle" value="${druid.pool.size.min}" />
  11. <property name="maxActive" value="${druid.pool.size.max}" />
  12. <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
  13. <property name="filters" value="stat" />
  14. </bean>

Druid常见问题:

1、怎么打开Druid的监控统计功能

Druid的监控统计功能是通过filter-chain扩展实现,如果你要打开监控统计功能,配置StatFilter。

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

2、怎样使用Druid的内置监控页面

内置监控页面是一个Servlet。

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE

3、内置监控中的Web和Spring关联监控怎么配置?

Web关联监控配置

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter

Spring关联监控配置

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_Druid%E5%92%8CSpring%E5%85%B3%E8%81%94%E7%9B%91%E6%8E%A7%E9%85%8D%E7%BD%AE

4、怎么配置防御SQL注入攻击

Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

5、Druid有没有参考配置

不同的业务场景需求不同,你可以使用我们的参考配置,但建议你仔细阅读相关文档,了解清楚之后做定制配置。https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE

6、我想日志记录JDBC执行的SQL,如何配置

Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter。

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

7、我的程序可能产生连接泄漏了,有什么办法?

Druid提供了多种监测连接泄漏的手段。

https://github.com/alibaba/druid/wiki/%E8%BF%9E%E6%8E%A5%E6%B3%84%E6%BC%8F%E7%9B%91%E6%B5%8B

8、在Druid中使用PSCache会有内存占用过大问题么?

连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池。

https://github.com/alibaba/druid/wiki/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8BPreparedStatementCache%E5%86%85%E5%AD%98%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88

9、有没有和其他数据库连接池的对比?

https://github.com/alibaba/druid/wiki/%E5%90%84%E7%A7%8D%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%AF%B9%E6%AF%94

10、从其他连接池迁移要注意什么?

不同连接池的参数参照对比:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=6947005

DBCP迁移 https://github.com/alibaba/druid/wiki/DBCP%E8%BF%81%E7%A7%BB

11、Druid中有没有类似Jboss DataSource中的ExceptionSorter

ExceptionSorter是JBoss DataSource中的优秀特性,Druid也有一样功能的ExceptionSorter,但不用手动配置,自动识别生效的。

具体看这里:http://code.alibabatech.com/wiki/display/Druid/ExceptionSorter

12、Druid中的maxIdle为什么是没用的?

maxIdle是Druid为了方便DBCP用户迁移而增加的,maxIdle是一个混乱的概念。连接池只应该有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分别相当于maxPoolSize和minPoolSize。

13、我的应用配置的是JNDI数据源,可以用DruidDataSource么?

DruidDataSource支持JNDI配置,具体看这里:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_JNDI_Tomcat

具体实现的类是这个:com.alibaba.druid.pool.DruidDataSourceFactory,你可以阅读代码加深理解。

14、我的应用已使用DBCP,是代码中写死的,怎样更换为Druid?

可以的,Druid提供了一个中完全平滑迁移DBCP的办法。

1) 从http://repo1.maven.org/maven2/com/alibaba/druid/druid-wrapper/ 下载druid-wrapper-xxx.jar

2) 加入druid-xxx.jar

3) 从你的WEB-INF/lib/中删除dbcp-xxx.jar

4) 按需要加上配置,比如JVM启动参数加上-Ddruid.filters=stat,动态配置druid的filters

这种用法,使得可以在一些非自己开发的应用中使用Druid,例如在sonar中部署druid,sonar是一个使用jruby开发的web应用,写死了DBCP,只能够通过这种方法来更换。

15、有一些SQL执行很慢,我希望日志记录下来,怎么设置?

在StatFilter配置中有慢SQL执行日志记录。

看这里 https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

16、我希望加密我的数据库密码怎么办?

运维和DBA都不希望把密码明文直接写在配置文件中,Druid提供了数据库秘密加密的功能。

具体看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

17、如果DruidDataSource在init的时候失败了,不再使用,是否需要close

是的,如果DruidDataSource不再使用,必须调用close来释放资源,释放的资源包括关闭Create和Destory线程。

18、DruidDataSource支持哪些数据库?

理论上说,支持所有有jdbc驱动的数据库。

19、Oracle下jdbc executeBatch时,更新行数计算不正确

使用jdbc的executeBatch 方法,如果数据库为oracle,则无论是否成功更新到数据,返回值都是-2,而不是真正被sql更新到的记录数,这是Oracle JDBC Driver的问题,Druid不作特殊处理。

20、Druid如何自动根据URL自动识别DriverClass的

Druid是根据url前缀来识别DriverClass的,这样使得配置更方便简洁。

21、如何保存监控记录

https://github.com/alibaba/druid/wiki/%E6%80%8E%E4%B9%88%E4%BF%9D%E5%AD%98Druid%E7%9A%84%E7%9B%91%E6%8E%A7%E8%AE%B0%E5%BD%95

22、我想Log输出SQL执行的信息怎么办?

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

23、如何配置Druid内置的log实现

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AEdruid%E5%86%85%E7%BD%AE%E7%9A%84log%E5%AE%9E%E7%8E%B0

 

使用Druid作为数据源的更多相关文章

  1. Spring Boot 中使用 MyBatis 整合 Druid 多数据源

    2017 年 10 月 20 日   Spring Boot 中使用 MyBatis 整合 Druid 多数据源 本文将讲述 spring boot + mybatis + druid 多数据源配置方 ...

  2. SpringBoot系列之集成Druid配置数据源监控

    SpringBoot系列之集成Druid配置数据源监控 继上一篇博客SpringBoot系列之JDBC数据访问之后,本博客再介绍数据库连接池框架Druid的使用 实验环境准备: Maven Intel ...

  3. Druid动态数据源配置

    上文已经讲了单个数据源的Druid的配置(http://www.cnblogs.com/nbfujx/p/7686634.html) Druid动态数据源配置 主要是继承AbstractRouting ...

  4. (七)spring+druid多数据源配置

    druid多数据源配置 一.druid简介 Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser. ...

  5. Spring Boot + Druid 多数据源绑定

    date: 2019-12-19 14:40:00 updated: 2019-12-19 15:10:00 Spring Boot + Druid 多数据源绑定 版本环境:Spring Boot 2 ...

  6. MyBatis初级实战之四:druid多数据源

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...

  8. spring boot +mybatis+druid 多数据源配置

    因为我的工程需要在两个数据库中操作数据,所以要配置两个数据库,我这里没有数据源没有什么主从之分,只是配合多数据源必须要指定一个主数据源,所以我就把 操作相对要对的那个数据库设置为主数据(dataBas ...

  9. 【使用篇二】SpringBoot使用Druid作为数据源(19)

    Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容数据库,包括了Oracle.MySQL.PostgreSQL.SQL Server.H2等.Druid在监 ...

随机推荐

  1. TC598 div2

    题意:给一些物品item[],这些物品的重量在101至300之间,要将这些物品全部放进若干个bins中,已知bins盛的重量为300,可以将bins装满也可以不装满, 问放这些物品最少需要几个bins ...

  2. SIFT算法:KeyPoint找寻、定位与优化

    SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 目录: 1.找寻 2.定位 3.优化 1 KeyPoint ...

  3. DataSet用法详细

    转自:http://www.cnblogs.com/zeroone/archive/2012/06/08/2541299.html DataSet用法详细 一.特点介绍 1.处理脱机数据,在多层应用程 ...

  4. (转载)PHP数组传递是值传递而非引用传递

    (转载)http://www.fengfly.com/plus/view-212127-1.html 在调用函数时通过将PHP数组作为实参赋给形参,在函数中修改,并不会影响到数组本身. 说明此过程中的 ...

  5. HDU-2547 无剑无我

    无剑无我 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. List迭代循环时出现分问题

    一个List,通过迭代之后给List中的实体重新赋值,代码如下 public List getListByPage(Page currPage) { Map recordTypeMap = BusnD ...

  7. Tornado基本使用

    一.快速上手 #!/usr/bin/env python # -*- coding:utf-8 -*- import tornado.ioloop import tornado.web class M ...

  8. 2 weekend110的mapreduce介绍及wordcount + wordcount的编写和提交集群运行 + mr程序的本地运行模式

    把我们的简单运算逻辑,很方便地扩展到海量数据的场景下,分布式运算. Map作一些,数据的局部处理和打散工作. Reduce作一些,数据的汇总工作. 这是之前的,weekend110的hdfs输入流之源 ...

  9. hdoj 1201 18岁生日

    18岁生日 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  10. 在终端中创建一个简单的mysql表格

    打开终端后输入:/usr/local/MySQL/bin/mysql -u root –p 然后输入密码:***** 创建数据库:create database work; 使用当前数据库:use w ...