SpringBoot集成Druid連接池

  • 2019 年 10 月 6 日
  • 筆記

關於資料庫連接池

  • 早期資料庫訪問(也沒多少人上網) ​  ①裝載資料庫驅動程式;   ②通過jdbc建立資料庫連接;   ③訪問資料庫,執行sql語句;   ④斷開資料庫連接。 對於並發量大的網站,會導致以下問題:
    • 每一次web請求都要建立一次資料庫連接,在同樣的步驟下重複佔用系統資源
    • 不能控制被創建的連接對象數,系統資源會被毫無顧及的分配出去 如連接過多,也可能導致記憶體泄漏,伺服器崩潰。
  • 資料庫連接池 連接池的作用是為了提高性能,將已經創建好的連接保存在池中,當有請求來時,直接使用已經創建好的連接對Server端進行訪問。 這樣省略(復用)了創建連接和銷毀連接的過程(TCP連接建立時的三次握手和銷毀時的四次握手),從而在性能上得到了提高。
  • 囂張的Druid(GitHub的Wiki上自稱是Java語言最好的資料庫連接池)

集成Druid

在上次Thymeleaf基礎上進行集成

https://www.cnblogs.com/noneplus/p/11528129.html

  • 引入pom
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->  <dependency>      <groupId>com.alibaba</groupId>      <artifactId>druid</artifactId>      <version>1.1.20</version>  </dependency>
  • yaml spring: datasource: # 數據源基本配置 username: noneplus password: Noneplus564925080! driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://47.103.6.247:3306/user?serverTimezone=UTC type: com.alibaba.druid.pool.DruidDataSource # Druid數據源配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: 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.slowSqlMillis=500 thymeleaf: cache: false pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true pageSizeZero: false #pageSize=0
  • DruidConfig package zkrun.top.web.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 { //載入application.yaml中的Druid配置 @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } //配置Druid的監控 //1、配置一個管理後台的Servlet @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map<String,String> initParams = new HashMap<>(); initParams.put("loginUsername","hq"); initParams.put("loginPassword","564925080"); initParams.put("allow","");//默認就是允許所有訪問 initParams.put("deny","192.168.15.21"); bean.setInitParameters(initParams); return bean; } //2、配置一個web監控的filter @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map<String,String> initParams = new HashMap<>(); initParams.put("exclusions","*.js,*.css,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; } }
  • log4j <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>

測試

訪問:

http://localhost:8080/druid/

實時監控:

數據源配置文件密碼加密顯示

  • 找到jar包,在終端打開:
  • 生成密碼
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.ConfigTools yourPassword

其中druid-1.0.16.jar換成正在使用對應的版本,yourPassword改成資料庫連接的密碼。

生成privateKey和publicKey以及password

privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAgiX0+n2diIixWASA642qrI8hTo2xg1LItfeDFwGEg9G1wvlarF69gq+wDBpPhY63DDbry8d3I/vNZMaG0bGxwwIDAQABAkAQfiDiUWLSN4hJwCBaOVSkk2rEGp6hJq  96p8f79VxGm/FneqyzLgiIQvvIutsOWSSQses+C/cDoXYEgfddieSpAiEAuq1lcFuBPh7MWZwlbIi0GM4+/1tNQed+W9Lm3qGJYk0CIQCyepaXbrY8Vk8pUZMOKr74kFFBfG5WqbAJuNYym1PMTwIgZttPfx8METxLADzm6exQvzI0x+J4qQ1yNAn  6p0R+PCkCIFPZ8EI5C3kRe6OH5bT0NECHXQWNNjGVC1Wl90xTWW1VAiEAnKdXLI45e1e8jgpCQ4TG90PmDlKlrcxUnBiHUrOhyew=  publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIIl9Pp9nYiIsVgEgOuNqqyPIU6NsYNSyLX3gxcBhIPRtcL5WqxevYKvsAwaT4WOtww268vHdyP7zWTGhtGxscMCAwEAAQ==  password:MEMMpYHaOUFVuaR37bMbUmGW76WVSLAD7pnFLrbup5H4Q6sZvWMDsYAcnZvAL2hY2Man1rc6SCJMYwrse1xPKw==
  • yaml配置

修改password,添加公鑰。

spring:    datasource:      #   數據源基本配置      username: noneplus      password: MEMMpYHaOUFVuaR37bMbUmGW76WVSLAD7pnFLrbup5H4Q6sZvWMDsYAcnZvAL2hY2Man1rc6SCJMYwrse1xPKw==   # 1.配置生成的password      driver-class-name: com.mysql.cj.jdbc.Driver      url: jdbc:mysql://47.103.6.247:3306/user?serverTimezone=UTC      type: com.alibaba.druid.pool.DruidDataSource      #   Druid數據源配置      initialSize: 5      minIdle: 5      maxActive: 20      maxWait: 60000      timeBetweenEvictionRunsMillis: 60000      minEvictableIdleTimeMillis: 300000      validationQuery: SELECT 1 FROM DUAL      testWhileIdle: true      testOnBorrow: false      testOnReturn: false      poolPreparedStatements: true      #   配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆      filters: stat,wall,log4j,config  # 3.添加config      maxPoolPreparedStatementPerConnectionSize: 20      useGlobalDataSourceStat: true      # 2.開啟加密,配置公鑰      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIIl9Pp9nYiIsVgEgOuNqqyPIU6NsYNSyLX3gxcBhIPRtcL5WqxevYKvsAwaT4WOtww268vHdyP7zWTGhtGxscMCAwEAAQ==    thymeleaf:      cache: false  pagehelper:    helperDialect: mysql    reasonable: true    supportMethodsArguments: true    pageSizeZero: false #pageSize=0

程式碼參考

https://github.com/HCJ-shadow/SpringBootPlus

Tags: