一办绝、引言
Druid是Java語言中最好的數(shù)據(jù)庫連接池蔗崎。Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能约素。
Druid內(nèi)置提供了一個(gè)StatViewServlet用于展示Druid的統(tǒng)計(jì)信息书释。
因?yàn)榘⒗锇桶烷_源了druid連接池源碼拇囊,我們可以通過maven倉庫可以獲得jar包依賴硅急。
訪問mvnrepository.com/artifact/com.alibaba/druid選擇1.0.29覆享,點(diǎn)擊進(jìn)入后復(fù)制maven內(nèi)容到pom.xml內(nèi)即可
二、實(shí)現(xiàn)
1营袜、引入依賴
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
2撒顿、包結(jié)構(gòu)展示如下
3、配置 Druid 數(shù)據(jù)源
server:
port: 9090
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3308/user_test?useUnicode=true&useSSL=false&characterEncoding=UTF-8
#配置監(jiān)控統(tǒng)計(jì)攔截的 filters,去掉后監(jiān)控界面sql無法統(tǒng)計(jì)荚板,'wall'用于防火墻
filters: stat, wall
#最大活躍數(shù)
maxActive: 20
#初始化數(shù)量
initialSize: 1
#最大連接等待超時(shí)時(shí)間
maxWait: 60000
#打開PSCache凤壁,并且指定每個(gè)連接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
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
jpa:
database: MySQL
show-sql: true
format_sql: true
hibernate:
naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
4跪另、Configuration 包中編寫 druid 監(jiān)控類
package com.ly.springbootjpa.configuration;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* druid 監(jiān)控
*/
@Configuration
public class DruidConfiguration {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
}
/**
* druid 數(shù)據(jù)源狀態(tài)監(jiān)控
* @return
*/
@Bean
public ServletRegistrationBean statViewServlet(){
//創(chuàng)建servlet注冊(cè)實(shí)體
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//設(shè)置ip白名單
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//設(shè)置ip黑名單拧抖,如果allow與deny共同存在時(shí),deny優(yōu)先于allow
servletRegistrationBean.addInitParameter("deny","192.168.0.19");
//設(shè)置控制臺(tái)管理用戶
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","123456");
//是否可以重置數(shù)據(jù)
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
/**
* druid 過濾器
* @return
*/
@Bean
public FilterRegistrationBean statFilter(){
//創(chuàng)建過濾器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//設(shè)置過濾器過濾路徑
filterRegistrationBean.addUrlPatterns("/*");
//忽略過濾的形式
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
5、登錄監(jiān)控中心 (用戶名:druid 密碼:123456)
6免绿、在監(jiān)控中心中查看各種信息
當(dāng)執(zhí)行不同的 方法操作后會(huì)對(duì)于不同的監(jiān)控信息記錄
監(jiān)控中心說明如下:
名稱 | 作用 |
---|---|
數(shù)據(jù)源 | 可以看到項(xiàng)目中管理的所有數(shù)據(jù)源配置的詳細(xì)情況唧席,除了密碼沒有顯示外其他都在 |
SQL監(jiān)控 | 可以查看所有的執(zhí)行sql語句 |
SQL防火墻 | druid提供了黑白名單的訪問,可以清楚的看到sql防護(hù)情況 |
Web應(yīng)用 | 可以看到目前運(yùn)行的web程序的詳細(xì)信息 |
URI監(jiān)控 | 可以監(jiān)控到所有的請(qǐng)求路徑的請(qǐng)求次數(shù)、請(qǐng)求時(shí)間等其他參數(shù) |
Session監(jiān)控 | 可以看到當(dāng)前的session狀況淌哟,創(chuàng)建時(shí)間迹卢、最后活躍時(shí)間、請(qǐng)求次數(shù)徒仓、請(qǐng)求時(shí)間等詳細(xì)參數(shù) |
JSONAPI | 通過api的形式訪問Druid的監(jiān)控接口婶希,api接口返回Json形式數(shù)據(jù) |