springBoot使用druid不显示SQL监控问题

问题

默认使用

spring.datasource.xx 直接配置
spring.datasource.url=jdbc:mysql://xxxx:xxx/xxxx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

Druid的控台是监控不了SQL的。

 

解决方案

依赖starter包

      
            com.alibaba
            druid-spring-boot-starter
        

配置如下:

spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://xx:xx/xx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
spring.datasource.druid.username=xx
spring.datasource.druid.password=xx
spring.datasource.druid.max-active=10
spring.datasource.druid.min-idle=10
spring.datasource.druid.initial-size=10
spring.datasource.druid.filters=stat

就能监控到SQL了。

 

其实原理很简单:

一开始工程配置如下:

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

默认SpringBoot会启动的时候通过反射DruidDataSource的实例来初始化ds,但是druid的其他属性是没有set进去的。(详情看源码:org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder#build) 或者断点看下debug属性。

当然可以指定系统的环境变量来set进去,但是更麻烦(详情看源码:com.alibaba.druid.pool.DruidDataSource#configFromPropety)

所以只要是能把druid的filters属性配置进去就好了,可以直接 @Bean代码启动或者其他方式都可以看到视图。

比如:

   @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        return druidDataSource;
    }

把属性配置到对应的引入上。

 

你可能感兴趣的:(错误异常)