Druid是Alibaba開(kāi)源的的數(shù)據(jù)庫(kù)連接池。Druid能夠提供強(qiáng)大的監(jiān)控功能,比如sql監(jiān)控、URI監(jiān)控、Session監(jiān)控等,在功能、性能、擴(kuò)展性方面都超過(guò)其他例如DBCP、C3P0等連接池,而且Druid是一個(gè)開(kāi)源項(xiàng)目,源碼托管在github上,地址是 https://github.com/alibaba/druid
配置
打開(kāi)pom.xml引入依賴,可在https://mvnrepository.com/tags/maven搜索druid下載,建議下載alibaba提供的
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--導(dǎo)入德魯伊-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<!--導(dǎo)入log4j,因?yàn)閐riud添加的拓展插件為log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
修改配置文件application.yml
========================
#數(shù)據(jù)源基本配置
spring:
datasource:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver# 時(shí)區(qū)配置錯(cuò)誤就添加 serverTimezone = UTC
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
#druid增加的配置
type: com.alibaba.druid.pool.DruidDataSource
=========================以下配置酌情處理===========
# 初始化連接池個(gè)數(shù)
initialSize: 5
# 最小連接池個(gè)數(shù)
minIdle: 5
# 最大連接池個(gè)數(shù)
max-active: 20
# 配置獲取連接等待超時(shí)的時(shí)間
maxWait: 60000
# 配置間隔多久才進(jìn)行一次檢測(cè)
timeBetweenEvictionRunsMillis: 60000
# 最小生存的時(shí)間
minEvictableIdleTimeMillis: 300000
# 用來(lái)檢測(cè)連接是否有效的sql,要求是一個(gè)查詢語(yǔ)句。
# 如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會(huì)起作用
validationQuery: SELECT 1 FROM DUAL
# 建議配置為true,不影響性能,并且保證安全性。
# 申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測(cè)連接是否有效。
testWhileIdle: true
# 申請(qǐng)連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能
testOnBorrow: false
# 歸還連接時(shí)執(zhí)行validationQuery檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能
testOnReturn: false
# 打開(kāi)PSCache,并且指定每個(gè)連接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 通過(guò)別名的方式配置擴(kuò)展插件,多個(gè)英文逗號(hào)分隔,常用的插件有:
# 監(jiān)控統(tǒng)計(jì)用的filter:stat
# 日志用的filter:log4j
# 防御sql注入的filter:wall
filters: stat,wall,log4j
# 通過(guò)connectProperties屬性來(lái)打開(kāi)mergeSql功能;慢SQL記錄
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多個(gè)DruidDataSource的監(jiān)控?cái)?shù)據(jù)
useGlobalDataSourceStat: true
添加配置類DruidConfig
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid() {
return new DruidDataSource();
}
//配置Druid的監(jiān)控 現(xiàn)在可以在application.yml配置文件中配置了
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
Map<String, String> initMap = new HashMap<>();
//設(shè)置賬號(hào)密碼
initMap.put("loginUsername", "admin");
initMap.put("loginPassword", "123456");
initMap.put("allow", "");//默認(rèn)允許所有地址訪問(wèn)
// initMap.put("deny", "192.168.3.22"); 拒絕地址訪問(wèn)
bean.setInitParameters(initMap);
return bean;
}
//配置web監(jiān)控的 filter
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String, String> initMap = new HashMap<>();
//排除js腳本文件,css樣式
initMap.put("exclusions", "*.js,*.css,/druid/*");
bean.setInitParameters(initMap);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}
啟動(dòng)項(xiàng)目,瀏覽器輸入localhost:8080/druid,輸入用戶名和密碼為admin,123456進(jìn)入訪問(wèn)頁(yè)面成功


至此就能在圖形化界面查看SQL監(jiān)控,數(shù)據(jù)源等功能