描述
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。
项目地址: Druid
有需要的,可以上去仔细的去研究一下这个项目。
打开监控功能
Druid内置提供一个StatFilter,用于统计监控信息
别名配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="filters" value="stat" />
</bean>
yml配置开启:
stat-view-servlet:
enabled: true
filter:
stat:
enabled: true
web-stat-filter:
enabled: true
配置防SQL攻击
提供了 wallfilter 来做 sql:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
...
<property name="filters" value="wall"/>
</bean>
yml配置:
filters: wall
程序防止泄露问题
当程序存在缺陷时,申请的连接忘记关闭,这时候,就存在连接泄漏了。Druid提供了RemoveAbandanded相关配置,用来关闭长时间不使用的连接。RemoveAbandanded功能不建议在生产环境中使用,仅用于连接泄露检测诊断
配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="removeAbandoned" value="true" /> <!-- 打开removeAbandoned功能 -->
<property name="removeAbandonedTimeout" value="1800" /> <!-- 1800秒,也就是30分钟 -->
<property name="logAbandoned" value="true" /> <!-- 关闭abanded连接时输出错误日志 -->
</bean>
配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈
yml配置:
remove-abandoned: true
remove-abandoned-timeout: 1800
log-abandoned: true
配置成功后 在数据源中可以看到堆栈信息: http://localhost:8080/druid/datasource.html
Druid中使用PSCache会有内存占用过大问题?
Oracle数据库下PreparedStatementCache内存问题解决方案
如果有使用 Oracle的可以仔细看看,PreparedStatementCache带来的问题,以及Druid 是如何解决的。
数据库连接池对比
Druid | BoneCP | DBCP | C3P0 | Proxool | JBoss | Tomcat-Jdbc | |
---|---|---|---|---|---|---|---|
LRU | 是 | 否 | 是 | 否 | 是 | 是 | ? |
PSCache | 是 | 是 | 是 | 是 | 否 | 否 | 是 |
PSCache-Oracle-Optimized | 是 | 否 | 否 | 否 | 否 | 否 | 否 |
ExceptionSorter | 是 | 否 | 否 | 否 | 否 | 是 | 否 |
更新维护 | 是 | 否 | 否 | 否 | 否 | ? | 是 |
从官方给出的图来看,Druid 是所有都支持的,并且也是更新最快的。没一个月发布一个窗口。
整合
pom.xml
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>
yml 配置:
druid:
initial-size: 1
min-idle: 10
max-active: 20
max-wait: 6000
time-between-eviction-runs-millis: 2000
min-evictable-idle-time-millis: 600000
max-evictable-idle-time-millis: 900000
remove-abandoned: true
remove-abandoned-timeout: 1800
log-abandoned: true
stat-view-servlet:
enabled: true
filter:
stat:
enabled: true
web-stat-filter:
enabled: true
filters: wall
启动项目访问: http://localhost:8080/druid/
出现以下页面,说明访问成功了。接下来就可以看到Druid 为我们提供了监控页面。接下来我们就可以在项目中
获取 Druid 的监控数据
@GetMapping("/stat")
public Object druidStat(){
//该方法可以获取所有数据源的监控数据,除此之外 DruidStatManagerFacade 还提供了一些其他方法,你可以按需选择使用。
return DruidStatManagerFacade.getInstance().getDataSourceStatDataList();
}
使用api获取监控的数据。
spring-boot-integrate 然后后续会集成更多的模块进去,需要请点个star。后续会集成更多的接口实现,有需要的请保存。 如果这篇文章,有帮助到大家的,请给作者一个一键三连,谢谢