【原创】druid控制台快速实践 & 无法监控到sql问题

2 篇文章 0 订阅
2 篇文章 0 订阅

1.监控台集成编码


@EnableTransactionManagement
@Configuration
@Slf4j
@EnableConfigurationProperties(MybatisPlusProperties.class)
public class MybatisPlusConfig {

    @Value("${spring.datasource.druid.username:root}")
    private String druidAccount;

    @Value("${spring.datasource.druid.password:root}")
    private String druidPassword;

    /**
     * 如需调整 {@link com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration#sqlSessionFactory(DataSource)}
     */
    @Bean("sqlSessionFactory")
    @Primary
    public SqlSessionFactory sqlSessionFactory(MybatisPlusProperties properties,  ApplicationContext applicationContext) throws Exception {···}

    /**
     * 注册一个StatViewServlet,进行druid监控页面配置
     * @return servlet registration bean
     */
    @Bean
    @ConditionalOnProperty(name = "spring.datasource.druid.console", havingValue = "enabled")
    public ServletRegistrationBean druidStatViewServlet() {
        // 先配置管理后台的servLet,访问的入口为/druid/
        ServletRegistrationBean servletRegistrationBean =
                new ServletRegistrationBean(new StatViewServlet(), "/druid/*");

        servletRegistrationBean.addInitParameter("loginUsername", druidAccount);
        servletRegistrationBean.addInitParameter("loginPassword", druidPassword);
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    /**
     * 注册一个过滤器,允许页面正常浏览
     * @return filter registration bean
     */
    @Bean
    @ConditionalOnProperty(name = "spring.datasource.druid.console", havingValue = "enabled")
    public FilterRegistrationBean druidStatFilter() {
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
        // 添加过滤规则.
        filterRegistrationBean.addUrlPatterns("/*");
        // 添加不需要忽略的格式信息.
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

2.数据源连接池服务配置

spring:
...............................................................................................
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  #使用Druid连接池
    url: jdbc:mysql://xxxx:3307/idaas?serverTimezone=GMT%2B8&useUnicode=true&&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true
    username: root
    password: xxxx
    initial-size: 3
    max-active: 100
    min-idle: 5
    max-wait: 12000
    pool-prepared-statements: true
    validation-query: select 1 from dual
    filters: mergeStat
    useGlobalDataSourceStat: true
    druid:
      username: admin123
      password: admin123
      console: enabled
...............................................................................................
sw:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  #使用Druid连接池
    url: jdbc:mysql://xxxx:3306/kiam?serverTimezone=GMT%2B8&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&allowMultiQueries=true
    username: root
    password: xxxx
    initial-size: 3
    max-active: 100
    min-idle: 5
    max-wait: 12000
    pool-prepared-statements: true
    validation-query: select 1 from dual
    filters: mergeStat
    useGlobalDataSourceStat: true
配置解释:
# 数据库
spring:
  datasource:
    MyDb1:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://数据库ip:3306/数据库名
      username: 用户名
      password: 密码
    MyDb2:
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://数据库ip:3306/数据库名
      username: 用户名
      password: 密码
    druid:
      #最大活跃数
      maxActive: 20
      #初始化数量
      initialSize: 1
      #最大连接等待超时时间
      maxWait: 60000
      #打开PSCache,并且指定每个连接PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      #通过connectionProperties属性来打开mergeSql功能;慢SQL记录
      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      minIdle: 1
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: select 1 from dual
      validationQuery1: select 1
      # 注意 有的数据库不支持select 1 from dual 在配置处需要修改为下方的select 1
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      #配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
      filters: stat, wall, log4j
      # 合并多个DruidDataSource的监控数据
      use-global-data-source-stat: true

3.数据源连接池控制台

  • 地址:http://X.X.X.X:8090/v5/druid/login.html
  • 界面:
    在这里插入图片描述

4.druid控制台无法监控到sql

  • 原因:filter类名为空,缺少filters,貌似没有注册进

4.1 解决方案:

  1. 修改jvm启动参数:

    -Ddruid.filters=mergeStat -Ddruid.useGlobalDataSourceStat=true,
    

    转自:Druid常见问题

  2. 增加配置参数

    druid:
      filters: mergeStat     # 配置监控统计拦截的filters,去掉后监控界面sql将无法统计,'wall'用于防火墙
      useGlobalDataSourceStat: true       # 合并多个DruidDataSource的监控数据
    
  3. 关联学习:springboot项目配置多数据库连接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Spring Boot 中,可以通过添加 Druid Starter 依赖来集成 Druid 数据库连接池,同时可以通过在 application.yml 或 application.properties 文件中添加配置来启用 Druid 控制台。 以下是在 application.yml 中配置 druid 控制台的示例: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # Druid 监控配置 # Spring Boot 2.x 版本使用以下配置 servlet: # Druid 监控配置 registration: bean-name: druidStatViewServlet url-mappings: /druid/* # Druid 连接池监控配置 filter: # Druid 连接池监控配置 druid: # 配置 Druid 监控,访问 http://localhost:8080/druid/ 即可看到监控页面 stat-view-servlet: enabled: true url-pattern: /druid/* reset-enable: false login-username: admin login-password: admin # 配置 Druid 连接池监控的 Filter,访问 http://localhost:8080/druid/api/ 即可看到监控数据 web-stat-filter: enabled: true url-pattern: /* exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" session-stat-enable: true session-stat-max-count: 1000 principal-session-name: user profile-enable: true ``` 以上配置中,我们指定了数据库连接信息和 Druid 数据源类型,并启用了 Druid监控功能。具体来说,我们配置了如下内容: - `servlet.registration.bean-name`:指定 Druid 监控 Servlet 的 Bean 名称,用于注册 Servlet。 - `servlet.registration.url-mappings`:指定 Druid 监控 Servlet 的 URL 映射,即访问该 URL 即可进入 Druid 监控页面。 - `filter.druid.stat-view-servlet.enabled`:是否启用 Druid 监控 Servlet。 - `filter.druid.stat-view-servlet.url-pattern`:指定 Druid 监控 Servlet 的 URL 映射,与 `servlet.registration.url-mappings` 一致。 - `filter.druid.stat-view-servlet.login-username` 和 `filter.druid.stat-view-servlet.login-password`:用于登录 Druid 监控页面的用户名和密码。 - `filter.druid.web-stat-filter.enabled`:是否启用 Druid 连接池监控 Filter。 - `filter.druid.web-stat-filter.url-pattern`:指定 Druid 连接池监控 Filter 的 URL 映射。 - `filter.druid.web-stat-filter.exclusions`:指定 Druid 连接池监控 Filter 排除的 URL。 - `filter.druid.web-stat-filter.session-stat-enable`:是否开启 Session 统计功能。 - `filter.druid.web-stat-filter.session-stat-max-count`:指定 Session 统计最大数量。 - `filter.druid.web-stat-filter.principal-session-name`:指定 Session 中保存用户信息的属性名称。 - `filter.druid.web-stat-filter.profile-enable`:是否启用 SQL 监控功能。 配置完成后,我们就可以通过访问配置的 URL 来查看 Druid 监控页面了。在页面上,我们可以查看连接池的使用情况、SQL 执行情况、SQL 监控等信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值