直接切入正題,
第一步添加相關依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.23</version>
</dependency>
當然還不能缺少jdbc、mysql、mybatis等相關依賴
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
第二步在yml中添加配置,具體參數可以參照官網
spring:
datasource:
# 原因是因爲MySQL版本過高,MySQL升級到8.0及以上,添加了許多新特性,安全性也得到提升。
# 當然操作時也增加了些繁瑣,需要考慮到的時區問題便是其中之一。
#解決辦法:
#a.url 部分加上 serverTimezone=UTC
# b.url 部分加上 serverTimezone=Asia/Shanghai
# c.或者在url路徑的問號後面加上:useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC,也可以解決問題.
url: jdbc:mysql://127.0.0.1:3306/worter?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: tiger
# com.mysql.jdbc.Driver 已經被廢棄 要用com.mysql.cj.jdbc.Driver,此類可以被自動加載不用手動加載
# driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 數據源其他配置
# 初始化數量
initialSize : 5
#通過connectionProperties屬性來打開mergeSql功能;慢SQL記錄
#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
minIdle: 5
# 最大活躍線程
maxActive: 20
#最大連接等待超時時間
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validaionQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置監控統計攔截的filters 去掉後監控界面sql無法統計,‘wall’用於防火牆
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true,druid.stat.slowSqlMills=500
雖然我們配置了druid連接池的其它屬性,但是不會生效。因爲默認是使用的java.sql.Datasource的類來獲取屬性的,有些屬性datasource沒有。如果我們想讓配置生效,需要手動創建Druid的配置文件。
第三步
接下來我們實現開啓監控功能。實現數據庫的各個方面的監控及數據統計,方便我們進行數據庫的優化。
我們來實現Druid的訪問Servlet和Filter。
在項目根目錄新建DruidConfiguration類。
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;
//數據源監控配置
@Configuration
public class DruidConfiguration {
//雖然我們配置了druid連接池的其它屬性,但是不會生效。因爲默認是使用的java.sql.Datasource的類來獲取屬性的,
// 有些屬性datasource沒有。如果我們想讓配置生效,需要手動創建Druid的配置文件。
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DruidDataSource druidDataSource(){
return new DruidDataSource();
}
@Bean
public ServletRegistrationBean statViewServlet(){
//創建servlet註冊實體
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//設置ip白名單
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//設置ip黑名單,如果allow與deny共同存在時,deny優先於allow
servletRegistrationBean.addInitParameter("deny","192.168.0.19");
//設置控制檯管理用戶
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","123123");
//是否可以重置數據
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
@Bean
public FilterRegistrationBean statFilter(){
//創建過濾器
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
//設置過濾器過濾路徑
filterRegistrationBean.addUrlPatterns("/*");
//忽略過濾的形式
filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
Druid的最強大之處在於它有着強大的監控,可以監控我們發送到數據庫的所有sql語句。方便我們後期排插錯誤。
配置完成之後我們啓動SpringBoot程序訪問:
http://localhost:8080/druid/ 就可以來到我們的登錄頁面面就是我們上面在DruidConfiguration中添加的控制檯管理用戶,我們可以在上面很好的看到運行狀況。
然後可以找幾個訪問數據源的操作,之後在sql監控菜單查看
菜單中很多功能還不太會用~~