一、Druid是數據庫鏈接池,功能、性能、擴展性方面都算不錯。最大的亮點是爲監控而生的數據庫鏈接池。css
二、數據庫、數據源、數據庫鏈接池、JDBC、JDBC實現是什麼關係?html
https://mvnrepository.com/search?q=druidjava
<!-- Druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
修改application.yml文件,增長type屬性mysql
type: com.alibaba.druid.pool.DruidDataSource
數據源:class com.alibaba.druid.pool.DruidDataSource 數據庫鏈接:com.mysql.cj.jdbc.ConnectionImpl@202898d7git
# druid 配置 dbType: mysql # 指定數據庫類型 mysql initialSize: 5 # 啓動初始化鏈接數量 minIdle: 5 # 最小空閒鏈接 maxActive: 20 # 最大鏈接數量(包含使用中的和空閒的) maxWait: 60000 # 最大鏈接等待時間 ,超出時間報錯 timeBetweenEvictionRunsMillis: 60000 # 設置執行一次鏈接回收器的時間 minEvictableIdleTimeMillis: 300000 # 設置時間: 該時間內沒有任何操做的空閒鏈接會被回收 validationQuery: select 'x' # 驗證鏈接有效性的sql testWhileIdle: true # 空閒時校驗 testOnBorrow: false # 使用中是否校驗有效性 testOnReturn: false # 歸還鏈接池時是否校驗 poolPreparedStatements: false # mysql 不推薦打開預處理鏈接池 # 配置監控統計攔截的filters,去掉後監控界面sql沒法統計,'wall'用於防火牆 filters: stat,wall,log4j # 設置過濾器 stat用於接收狀態,wall防止sql注入,logback說明使用logback進行日誌輸出 maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true # 統計全部數據源狀態 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 # sql合併統計 設置慢sql時間爲500,超過500 會有記錄提示
package com.jackson0714.springboot.config; 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; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @Configuration public class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid() { return new DruidDataSource(); } // 配置Durid監控 // 一、配置一個管理後臺的Servlet @Bean public ServletRegistrationBean statViewServlet() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map<String, String> servletInitParams = new HashMap<>(); servletInitParams.put("loginUserName", "Admin"); servletInitParams.put("loginPassword", "abc123"); servletInitParams.put("deny","192.168.10.160"); // 拒絕訪問 servletInitParams.put("allow",""); // 默認容許全部 servletRegistrationBean.setInitParameters(servletInitParams); return servletRegistrationBean; } // 二、配置一個web監控的filter @Bean public FilterRegistrationBean webStatFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); Map<String, String> filterInitParams = new HashMap<>(); filterInitParams.put("exclusions", "*.js,*.css,/druid/*");// 不攔截js、css文件請求,不攔截/druid/*的請求 filterRegistrationBean.setInitParameters(filterInitParams); filterRegistrationBean.setUrlPatterns(Arrays.asList("/*")); // 攔截全部請求 return filterRegistrationBean; } }
運行測試程序,能夠看到DataSource中的屬性值已經與配置文件中的相同github
http://192.168.10.160:8082/druidweb
會提示沒有權限訪問該後臺spring
查看監控:sql
有一條查詢請求的記錄數據庫
*************************** APPLICATION FAILED TO START *************************** Description: Failed to bind properties under 'spring.datasource' to javax.sql.DataSource: Property: spring.datasource.filters Value: stat,wall,log4j Origin: class path resource [application.yml]:23:14 Reason: org.apache.log4j.Logger Action: Update your application's configuration Process finished with exit code 1
解決方案:pom.xml文件中添加log4j的配置
<!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
servletInitParams.put("loginUsername", "Admin"); servletInitParams.put("loginPassword", "abc123");
未找到解決方案
下一篇咱們來說Spring Boot 整合 MyBatis
關注公衆號:悟空聊架構,回覆pmp,領取pmp資料!回覆悟空,領取架構師資料!
關注我,帶你天天進步一點點!
原文出處:https://www.cnblogs.com/jackson0714/p/spring-boot-06-druid.html