Druid数据库连接池监控的使用 | 您所在的位置:网站首页 › druid监控页面springboot › Druid数据库连接池监控的使用 |
Druid数据库连接池
1. Druid是什么?
Druid是Java语言中最好的数据库连接池,由阿里巴巴团队开发。Druid能够提供强大的监控和扩展功能。 github地址为https://github.com/alibaba/druid,有丰富的中文文档和常见问题的解答,非常方便。 2. 如何在springboot项目中使用?2.1 首先引入依赖 com.alibaba druid-spring-boot-starter 1.1.102.2 进行属性配置,仅供参考 spring: #数据库连接配置 datasource: url: jdbc:postgresql://127.0.0.1:5432/postgres data-username: postgres data-password: 123456 driver-class-name: org.postgresql.Driver type: com.alibaba.druid.pool.DruidDataSource druid: #JDBC配置 url: jdbc:postgresql://127.0.0.1:5432/postgres username: postgres password: 123456 driver-class-name: org.postgresql.Driver #连接池配置 initial-size: 10 max-active: 50 min-idle: 10 max-wait: 5000 pool-prepared-statements: true #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。 max-pool-prepared-statement-per-connection-size: 20 validation-query: SELECT 1 FROM DUAL validation-query-timeout: 20000 test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 test-on-return: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 min-evictable-idle-time-millis: 300000 #一个连接在池中最小生存的时间,单位是毫秒 # StatViewServlet配置。(因为暴露的监控信息比较敏感,支持密码加密和访问ip限定) stat-view-servlet: enabled: true url-pattern: /druid/* login-username: admin login-password: admin filter: stat: log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true各配置项的含义可以参考github的介绍,非常详细。值得注意的是stat-view-servlet属性配置的就是druid内置的监控页面,我们访问http://ip:port/druid,输入上面配置的用户名密码,即可看到下面的监控页面:
上面我们可以看到对sql执行的耗时等,但如果我们也想对方法进行监控可以么?答案肯定是可以的,在上面的监控页面我们可以看到有个叫spring监控,但因为没有配置,暂时为空。要开启监控配置也是非常简单的,如下: @Configuration @EnableAspectJAutoProxy(proxyTargetClass = true) public class DruidAspectConfig { @Bean public DruidStatInterceptor druidStatInterceptor() { DruidStatInterceptor dsInterceptor = new DruidStatInterceptor(); return dsInterceptor; } @Bean @Scope("prototype") public JdkRegexpMethodPointcut druidStatPointcut() { JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut(); pointcut.setPatterns("com.qa.cloud.mapper.*","com.qa.cloud.service.*"); return pointcut; } @Bean public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) { DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor(); defaultPointAdvisor.setPointcut(druidStatPointcut); defaultPointAdvisor.setAdvice(druidStatInterceptor); return defaultPointAdvisor; } }我们通过指定Patterns来确定要监控的方法,也可以通过接口类型,bean名称等进行配置。开启后效果如下: |
CopyRight 2018-2019 实验室设备网 版权所有 |