Druid号称是Java语言中最好的数据库连接池。
1) 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
2) 替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
3) 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
4) SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
5) 能够提供基于Filter-Chain模式的插件体系。
下面介绍下如何在项目中集成Druid:
1、maven依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid-version}</version> </dependency>
2、配置web.xml
<!-- druid --> <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> <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>
3、spring.xml中配置druid数据源
<!-- 数据源druid --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 配置初始化大小、最小、最大 --> <property name="initialSize" value="${druid.pool.size.init}" /> <property name="minIdle" value="${druid.pool.size.min}" /> <property name="maxActive" value="${druid.pool.size.max}" /> <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 --> <property name="filters" value="stat" /> </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关联监控配置
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是唯一解决这个问题的连接池。
9、有没有和其他数据库连接池的对比?
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、如何保存监控记录
22、我想Log输出SQL执行的信息怎么办?
https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter
23、如何配置Druid内置的log实现
相关推荐
在本文中,我们将深入探讨如何在SpringBoot项目中整合MyBatis,并利用Druid作为数据源进行SQL执行监控。这是一项关键的技术实践,对于优化应用性能、排查问题以及提升数据库操作效率具有重要意义。 首先,...
本项目将介绍如何在SpringBoot项目中结合Maven构建一个支持多数据源的系统,特别是如何处理MySQL和SQLServer两种不同的数据库类型,并使用Druid作为数据源连接池。 首先,我们需要理解“多数据源”这一概念。多数据...
本示例将详细讲解如何在SpringBoot项目中集成Druid并实现多数据源的自动切换。 首先,我们需要理解多数据源的概念。多数据源意味着应用程序可以同时连接和操作多个不同的数据库,这对于数据分层、高可用性和分布式...
而Druid作为一款优秀的数据库连接池,提供了丰富的监控和管理功能,能帮助我们更好地管理和优化数据库操作。 首先,我们需要在项目的`pom.xml`文件中添加Druid的依赖。Druid的最新版本通常可以在Maven中央仓库找到...
在本文中,我们将深入探讨如何将Spring Boot框架与MyBatis持久层框架集成,并使用Druid作为数据源。Spring Boot以其简洁的配置和自动化配置能力,使得开发过程更加高效;MyBatis则提供了灵活的SQL映射机制,而Druid...
Druid作为连接池,其优势在于强大的监控能力。我们可以配置Druid的StatFilter,收集SQL执行的统计信息,包括执行时间、次数等。此外,Druid还提供了Web监控页面,方便开发者实时查看数据库连接池的状态。在Spring ...
总结起来,这个项目展示了如何利用Spring Boot和Druid实现多数据源切换,以及如何在Spring Boot中配置和使用多线程来提升数据库操作的并发性能。对于初学者,这是一个很好的学习资源,可以深入理解Spring Boot的自动...
在Spring Boot中使用Druid实现多数据源,我们需要: 1. 定义数据源配置:在`application.properties`或者自定义的配置类中,配置两个数据源(例如:primary和secondary)的连接信息,包括URL、用户名、密码等。 2....
总的来说,本项目提供了一个实战示例,展示了如何在Spring Boot应用中使用Druid配置多数据源,以及如何进行数据源路由和事务管理。这对于开发者理解和掌握Spring Boot与数据库的交互具有很高的参考价值。
本篇文章将深入探讨如何在MyBatis中自定义使用Druid作为数据源。 首先,我们需要了解数据源(DataSource)在Java应用中的作用。数据源是应用程序和数据库之间的桥梁,它负责管理数据库连接,提高系统的并发性能。在...
在多数据源配置中,Druid可以作为一个高效且灵活的工具,帮助管理不同的数据库连接。 Mybatis是一个轻量级的持久层框架,它允许我们通过XML或注解来编写SQL映射文件,从而更直观地控制SQL执行。在多数据源环境中,...
使用Druid作为连接池,因为它提供了丰富的监控和扩展功能。首先引入Druid的依赖: ```xml <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter <version>1.2.13 ``` 然后,为每个...
在多数据源场景中,Druid不仅可以作为数据源管理工具,还提供了数据源切换、监控和统计分析的能力。Druid的数据源代理机制使得在运行时动态切换数据源成为可能,这对于处理多租户或者分库分表等复杂业务非常有用。 ...
3. **配置Druid数据源**:使用`DruidDataSource`类作为数据源,并在配置类中通过`@Bean`注解声明。别忘了为每个数据源设置不同的名字,如`primaryDataSource`和`secondaryDataSource`。 4. **创建数据源路由`...
- **配置文件**(yml格式):在application.yml中配置多个数据源的信息,使用`spring.datasource.druid`作为根路径,为每个数据源设置不同的路径,例如`db1`和`db2`。每个数据源下配置包括数据库类型、驱动类名、...
Druid的多数据源配置可以方便地实现这一目标。以下是一个基本的配置示例: ```xml <bean id="dataSourceMaster" class="com.alibaba.druid.pool.DruidDataSource"> <!-- 配置主库连接信息 --> ...
本话题聚焦于"Mybatis+Druid Association 数据源切换",主要探讨在特定场景下如何解决Druid的DruidPooledStatement无法直接切换数据源的问题。 Druid是阿里巴巴开源的一个强大而全面的Java数据库连接池,它提供了...
【标题】"SpringBoot + MyBatis(通用Mapper) + Druid多数据源"是一个常见的Java后端开发架构,用于构建高效、稳定且可扩展的Web应用程序。在这个框架中,SpringBoot简化了Spring应用的初始化和配置,MyBatis作为持久...
这里,我们通过`DataSourceContextHolder`来设置当前使用的数据源,这个类需要自己实现,它通常会使用ThreadLocal来存储当前线程的数据源标识。 在Mybatis-Plus配置中,需要配置两个MapperFactoryBean,分别对应两...
Spring Boot作为一款流行的Java框架,为开发者提供了灵活的多数据源配置方案。本文将详细介绍如何通过配置多个Mapper扫描不同的包路径来实现多数据源的配置。 #### 二、多数据源配置背景与应用场景 在Spring Boot...