生活随笔
收集整理的這篇文章主要介紹了
SpringBoot中使用 Druid 数据库连接池, 后台SQL监控无效
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先說下環境和配置, 問題
環境
SpringBoot: 2.3.4.RELEASE
druid-spring-boot-starter: 1.1.22
配置
datasource:url: jdbc
:mysql
://localhost
:3306/testdb
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUAL
testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truefilters: stat
,wall
maxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
@Configuration
public class DruidConfiguration {@Bean@ConfigurationProperties(prefix
= "spring.datasource")public DataSource
druidDataSource() throws SQLException
{DruidDataSource dds
= new DruidDataSource();dds
.setDbType("mysql");return dds
;}@Beanpublic ServletRegistrationBean
<StatViewServlet> servletRegistrationBean(){ServletRegistrationBean
<StatViewServlet> servletRegistrationBean
= new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");servletRegistrationBean
.addInitParameter("allow","127.0.0.1");//控制臺管理用戶servletRegistrationBean
.addInitParameter("loginUsername","admin");servletRegistrationBean
.addInitParameter("loginPassword","admin");//是否能夠重置數據servletRegistrationBean
.addInitParameter("resetEnable","false");return servletRegistrationBean
;}@Beanpublic FilterRegistrationBean
<WebStatFilter> statFilter(){FilterRegistrationBean
<WebStatFilter> filterRegistrationBean
= new FilterRegistrationBean<>(new WebStatFilter());//添加過濾規則filterRegistrationBean
.addUrlPatterns("/*");filterRegistrationBean
.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return filterRegistrationBean
;}
}
問題
解決辦法有兩
第一種, 修改yaml文件
其實很簡單, 就是把所有 druid 為根節點的配置項往上提, 也就是去掉 druid 節點
datasource:url: jdbc
:mysql
://localhost
:3306/xinguan
username: root
password: qkm19981013
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
initialSize: 5minIdle: 5maxActive: 20maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000validationQuery: SELECT 1 FROM DUAL
testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: truefilters: stat
,wall
maxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
這樣就可以監控到SQL語句了
但是這樣會有個問題(強迫癥患者, 就是 yaml 文件有好多警告, 看著不爽, 我就是 >_<), 如圖
第二種, 修改yaml文件和配置類
datasource:url: jdbc
:mysql
://localhost
:3306/xinguan
username: root
password: qkm19981013
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
其實也就是將 其他的配置放到配置類中
@Configuration
public class DruidConfiguration {@Bean@ConfigurationProperties(prefix
= "spring.datasource")public DataSource
druidDataSource() throws SQLException
{DruidDataSource dds
= new DruidDataSource();dds
.setInitialSize(5); dds
.setMaxActive(20); dds
.setMaxWait(60000); dds
.setMinIdle(8); dds
.setTimeBetweenEvictionRunsMillis(60000); dds
.setMinEvictableIdleTimeMillis(300000); dds
.setValidationQuery("SELECT 1 FROM DUAL"); dds
.setTestWhileIdle(true); dds
.setTestOnBorrow(false); dds
.setTestOnReturn(false); dds
.setPoolPreparedStatements(false); dds
.setFilters("stat,wall"); dds
.setMaxPoolPreparedStatementPerConnectionSize(50); dds
.setUseGlobalDataSourceStat(true);Properties properties
= new Properties();properties
.setProperty("druid.stat.mergeSql", "true");properties
.setProperty("druid.stat.slowSqlMillis", "100");dds
.setConnectProperties(properties
);dds
.setDbType("mysql");return dds
;}@Beanpublic ServletRegistrationBean
<StatViewServlet> servletRegistrationBean(){ServletRegistrationBean
<StatViewServlet> servletRegistrationBean
= new ServletRegistrationBean<>(new StatViewServlet(),"/druid/*");servletRegistrationBean
.addInitParameter("allow","127.0.0.1");//控制臺管理用戶servletRegistrationBean
.addInitParameter("loginUsername","admin");servletRegistrationBean
.addInitParameter("loginPassword","admin");//是否能夠重置數據servletRegistrationBean
.addInitParameter("resetEnable","false");return servletRegistrationBean
;}@Beanpublic FilterRegistrationBean
<WebStatFilter> statFilter(){FilterRegistrationBean
<WebStatFilter> filterRegistrationBean
= new FilterRegistrationBean<>(new WebStatFilter());//添加過濾規則filterRegistrationBean
.addUrlPatterns("/*");filterRegistrationBean
.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");return filterRegistrationBean
;}
}
這樣的話也可以監控到 SQL 語句, 此篇結束, 謝謝啦, 如果解決了您的問題, 幫忙給個贊哦!
總結
以上是生活随笔為你收集整理的SpringBoot中使用 Druid 数据库连接池, 后台SQL监控无效的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。