嗝屁小孩纸 2023-02-25 10:34 采纳率: 80.8%
浏览 22
已结题

Druid 怎么使用它的数据源监控?

在做分布式时,分布式大家都知道,数据库和业务层跟Controller 层是分离的,不在同一台机子。

问题:

  1. 怎么使用 Druid 达到数据源监控的目的,目前我在 Controller 层开启监控,只能监控到 url ,但无法监控 sql 执行,怎么解决?

img

img

  1. 我在 业务层使用 Druid 配置,全部失效,都无法监控到,难道 Druid 是通过监控 MyBatis 注解来实现的吗,在逻辑层做的监控,而不是在数据库上进行监控的吗?

img

img

  • 写回答

4条回答 默认 最新

  • bluetata 云计算领域优质创作者 2023-02-26 12:49
    关注

    可以看一下我的回答,其中部分参考自ChatGPT:
    针对你的问题1的解答:

    1. 在数据库层使用Druid的Filter功能,将SQL语句拦截下来,并用StatFilter来记录SQL执行的时间,慢查询,执行次数等信息。

    2. 在业务层使用Druid的DataSourceProxy,可以拦截Connection对象的操作,记录每个链接的创建时间,销毁时间,以及使用时长等信息。

    3. 在Controller层使用Druid的WebStatFilter,监控url的访问情况,以及访问时长,页面访问的次数等信息。

    通过上述方案,可以有效的实现Druid对分布式环境的数据源监控,从而更好的分析系统的运行状况,提高系统的性能。


    针对你的问题2解答:不是在数据库上进行监控的,Druid 可以监控你在业务层使用的数据库操作。它提供了一个高效的 JDBC 监控和管理功能,其中包括用户名、IP、SQL 语句、时间、执行时间等统计信息。它使用一个内置的数据库进行监控,可以通过 SQL 语句进行监控,而不是通过 MyBatis 注解来实现的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
  • MarkHan_ 2023-02-25 11:33
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    Druid是一个数据库连接池和监控平台,它提供了连接池的功能,可以实现高效、安全地管理连接,同时也提供了监控和统计功能,可以监控数据库连接池的状态、执行的SQL语句、响应时间等信息。

    要使用Druid的数据源监控功能,需要进行如下配置:

    1.引入Druid依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.12</version>
    </dependency>
    

    2.配置Druid数据源

    # 数据库连接配置
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    # 数据源配置
    spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
    spring.datasource.druid.initial-size=5
    spring.datasource.druid.min-idle=5
    spring.datasource.druid.max-active=20
    spring.datasource.druid.max-wait=60000
    spring.datasource.druid.time-between-eviction-runs-millis=60000
    spring.datasource.druid.min-evictable-idle-time-millis=300000
    spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
    spring.datasource.druid.test-while-idle=true
    spring.datasource.druid.test-on-borrow=false
    spring.datasource.druid.test-on-return=false
    spring.datasource.druid.pool-prepared-statements=true
    spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
    spring.datasource.druid.filters=stat,wall,log4j
    spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    
    1. 配置Druid监控平台
      ```
      @Configuration
      public class DruidConfig {

      @Value("${spring.datasource.url}")
      private String dbUrl;

      @Value("${spring.datasource.username}")
      private String username;

      @Value("${spring.datasource.password}")
      private String password;

      @Value("${spring.datasource.driver-class-name}")
      private String driverClassName;

      @Value("${spring.datasource.druid.initial-size}")
      private int initialSize;

      @Value("${spring.datasource.druid.min-idle}")
      private int minIdle;

      @Value("${spring.datasource.druid.max-active}")
      private int maxActive;

      @Value("${spring.datasource.druid.max-wait}")
      private int maxWait;

      @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
      private int timeBetweenEvictionRunsMillis;

      @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
      private int minEvictableIdleTimeMillis;

      @Value("${spring.datasource.druid.validation-query}")
      private String validationQuery;

      @Value("${spring.datasource.druid.test-while-idle}")
      private boolean testWhileIdle;

      @Value("${spring.datasource.druid.test-on-borrow}")
      private boolean testOnBorrow;

      @Value("${spring.datasource.druid.test-on-return}")
      private boolean testOnReturn;

      @Value("${spring.datasource.druid.pool-prepared-statements}")
      private boolean poolPreparedStatements;

      @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
      private int maxPoolPreparedStatementPerConnectionSize;

    ```

    评论 编辑记录
  • a1767028198 2023-02-25 11:36
    关注

    你使用的是人家的数据源,只有有数据源并且真正执行sql的地方才能拦截到sql

    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-02-25 12:11
    关注
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口