SpringBoot MySQL使用Druid,集成监控

Druid数据库连接池自带很多监控,比如sql监控、sql防火墙、web监控、url监控、session监控等。sql监控会监控应用运行期间的sql语句的执行数、执行时间、事务执行次数等指标,维护人员可全局了解sql执行情况,以便找出系统性能瓶颈,然后针对优化。web和url监控,可以让维护人员了解到系统中的请求次数、系统最大并发、url的访问次数和花费时间等内容。

目录

  • pom.xml添加依赖
  • 配置druid
    • 新建application-druid.yml
    • 测试
  • 具体代码请参考GitHub项目

pom.xml添加依赖

<dependency>
	<groupId>mysqlgroupId>
	<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
	<groupId>com.alibabagroupId>
	<artifactId>druid-spring-boot-starterartifactId>
	<version>1.1.10version>
dependency>

配置druid

新建application-druid.yml

spring:
  datasource:
    # 配置数据源
    driver-class-name: com.mysql.jdbc.Driver
    # 使用druid连接池
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://127.0.0.1:3306/demo_druid?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=true
    username: root
    password: root
    druid:
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 初始化大小,最小,最大
      initial-size: 5
      max-active: 50
      min-idle: 5
      # 配置获取连接等待超时时间
      max-wait: 60000
      # 打开PSCache,并且指定每个连接上PSCache的大小
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      validation-query: SELECT 'x'
      validation-query-timeout: 60000
      test-on-borrow: true
      test-on-return: true
      test-while-idle: true
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      min-evictable-idle-time-millis: 300000
      log-abandoned: true
      remove-abandoned: true
      remove-abandoned-timeout: 1800
      filters: stat,wall

      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: '*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'

      # 管理后台的url和登录账号密码
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: true
        login-username: admin
        login-password: 123456

      # 配置StatFilter
      filter:
        stat:
          db-type: mysql
          log-slow-sql: true
          slow-sql-millis: 2000
        # 配置WallFilter
        wall:
          db-type: mysql
          enabled: true
          config:
            delete-allow: true
            drop-table-allow: false
            multi-statement-allow: true
            delete-where-alway-true-check: true
            delete-where-none-check: true
      # 合并多个DruidDataSource的监控数据
      use-global-data-source-stat: true

有几个点需要注意的,spring.datasource.type需要指定为com.alibaba.druid.pool.DruidDataSource。为了安全考虑,给监控平台设置密码,上面application-druid.yml配置已指定了监控平台的url和登录账号密码

      # 管理后台的url和登录账号密码
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: true
        login-username: admin
        login-password: 123456

测试

这里偷个懒,都是get方法,具体看注解,我这里使用mybatis-plus生成的service,更多内容请参考代码和mybatis-plus文档

@RestController
@RequestMapping("/mp-user")
public class MpUserController {

    @Autowired
    private MpUserService mpUserService;

    /**
     * 添加一个新用户
     *
     * @author David Hong
     *
     * @return java.lang.Object
     */
    @GetMapping("/add")
    public Object post() {
        MpUser mpUser = new MpUser();
        mpUser.setUsername("yuan");
        mpUser.setAddress("广东深圳");
        mpUser.setOpenid("openid");
        // save()由mybatis-plus提供了insert sql
        mpUserService.save(mpUser);
        return "add";
    }

    /**
     * 通过id获取用户
     *
     * @author David Hong
     *
     * @param id
     * @return java.lang.Object
     */
    @GetMapping("/{id}")
    public Object get(@PathVariable Long id) {
    	// getById()由mybatis-plus提供了select sql
        return mpUserService.getById(id);
    }

    /**
     * 通过id删除用户
     *
     * @author David Hong
     * 
     * @param id
     * @return java.lang.Object
     */
    @GetMapping("/del/{id}")
    public Object del(@PathVariable Long id) {
    	// removeById()由mybatis-plus提供了update sql
        mpUserService.removeById(id);
        return "del";
    }

}

打开监控平台,上面的application-druid.yml配置的入口url是/druid,加上在application.properties中配置server.servlet.context-path=/demo-druid,总的url就是ip+端口+/demo-druid+/druid。分别调用上面controller中的3个接口,druid监控平台SQL监控情况如下图,sql的执行次数,执行时间,并发数一目了然,很棒
SpringBoot MySQL使用Druid,集成监控_第1张图片
当然了,还有URL监控,截图如下,
SpringBoot MySQL使用Druid,集成监控_第2张图片
更多内容请参考下面GitHub源码,然后自己耍吧

具体代码请参考GitHub项目

GitHub

你可能感兴趣的:(运维,SpringBoot,MySQL)