SpringBoot集成Druid連接池


關於數據庫連接池

  • 早期數據庫訪問(也沒多少人上網)

    ​  ①裝載數據庫驅動程序;

      ②通過jdbc建立數據庫連接;

      ③訪問數據庫,執行sql語句;

      ④斷開數據庫連接。


    對於並發量大的網站,會導致以下問題:

    • 每一次web請求都要建立一次數據庫連接,在同樣的步驟下重復占用系統資源

    • 不能控制被創建的連接對象數,系統資源會被毫無顧及的分配出去

      如連接過多,也可能導致內存泄漏,服務器崩潰。

  • 數據庫連接池

    連接池的作用是為了提高性能,將已經創建好的連接保存在池中,當有請求來時,直接使用已經創建好的連接對Server端進行訪問。

    這樣省略(復用)了創建連接和銷毀連接的過程(TCP連接建立時的三次握手和銷毀時的四次握手),從而在性能上得到了提高。

  • 囂張的Druid(GitHub的Wiki上自稱是Java語言最好的數據庫連接池)

    1568630680898

集成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/

1568639129611

實時監控:

1568639371677

1568639332218

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

  • 找到jar包,在終端打開:

1568640407073

  • 生成密碼
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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM