在项目运行过程中,为了监控项目的运行状况,除了日志之外,最好还能监控SQL的执行情况,如何实现?
通过阿里的druid来实现。
Druid是阿里巴巴开发的号称为监控而生的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource等等等,秒杀一切。
Druid 可以很好的监控 DB 池连接和 SQL 的执行情况,天生就是针对监控而生的 DB 连接池。
功能介绍:
配置Druid数据源(连接池): 如同以前 c3p0、dbcp 数据源可以设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等一样,Druid 数据源同理可以进行设置;
配置 Druid web 监控 filter(WebStatFilter): 这个过滤器的作用就是统计 web 应用请求中所有的数据库信息,比如 发出的 sql 语句,sql 执行的时间、请求次数、请求的 url 地址、以及seesion 监控、数据库表的访问次数 等等。
配置 Druid 后台管理 Servlet(StatViewServlet): Druid 数据源具有监控的功能,并提供了一个 web 界面方便用户查看,类似安装 路由器 时,人家也提供了一个默认的 web 页面;需要设置 Druid 的后台管理页面的属性,比如 登录账号、密码 等;
第一步:引入jar包;
<!--数据库连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.23</version> </dependency>
第二步:配置数据库连接池;
####spring配置#### spring: ###数据库配置 datasource: ##要使用的连接池实现的全称 type: com.alibaba.druid.pool.DruidDataSource druid: #最大连接数 max-active: 5000 #初始化大小 initial-size: 10 #最小连接数 min-idle: 1 #获取连接等待超时时间(单位:毫秒) max-wait: 60000 #间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 time-between-eviction-runs-millis: 60000 #一个连接在池中最小生存的时间,单位是毫秒 min-evictable-idle-time-millis: 30000 #启用游标缓存 pool-prepared-statements: true #最大可打开的游标数 max-pool-prepared-statement-per-connection-size: 20 #检验连接是否有效的查询语句。如果数据库Driver支持ping()方法,则优先使用ping()方法进行检查,否则使用validationQuery查询进行检查。(Oracle jdbc Driver目前不支持ping方法) validation-query: SELECT 1 FROM DUAL #应用向连接池申请连接,并且testOnBorrow为false时,连接池将会判断连接是否处于空闲状态,如果是,则验证这条连接是否可用 test-while-idle: true #应用向连接池申请连接时,连接池会判断这条连接是否是可用的,默认值false test-on-borrow: false #当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用,默认值false test-on-return: false #关闭自动重连 connection-error-retry-attempts: 0 break-after-acquire-failure: true
第三步:配置监控页面;
####spring配置#### spring: ###数据库配置 datasource: ##druid配置 druid: #配置监控统计拦截的filters,去掉后监控界面SQL无法进行统计,'wall'用于防火墙 #值:config,stat,wall,log4j2(stat必须,否则监控不到SQL) filters: stat #配置StatViewServlet(监控页面),用于展示Druid的统计信息 stat-view-servlet: # 启用StatViewServlet enabled: true # 访问内置监控页面的路径,内置监控页面的首页是/druid/index.html url-pattern: /druid/* # 不允许清空统计数据,重新计算 reset-enable: false # 配置监控页面访问密码 login-username: root login-password: 123 # 允许访问的地址,如果allow没有配置或者为空,则允许所有访问 #allow: localhost # 拒绝访问的地址,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝 #deny:
说明:我这里没有配置数据源!!!
第四步:查看监控页面。
启动项目后,访问/druid/login.html
来到登录页面,输入用户名和密码完成登录。
SQL监控
可以查看的具体执行的SQL语句,可以展示的列进行排序。
慢SQL记录功能
我们可以把慢SQL记录到日志当中。
spring: datasource: druid: filter: stat: enabled: true # 开启DruidDataSource状态监控 db-type: mysql # 数据库的类型 log-slow-sql: true # 开启慢SQL记录功能 slow-sql-millis: 2000 # 默认3000毫秒,这里超过2s,就是慢,记录到日志
URL监控
springAOP监控
添加aop依赖
<!--SpringBoot 的aop 模块--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
在 application.yml 配置aop切入点,配置多个英文逗号分隔。
spring: datasource: druid: aop-patterns: com.springboot.template.dao.*
去除页面的广告
到本地仓库,按路径查找common.js;
com/alibaba/druid/1.1.23/druid-1.1.23.jar/support/http/resources/js/common.js
将this.buildFooter();删掉。
其它内容见文末推荐。
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!