1. 程式人生 > >springboot集成druid連接池

springboot集成druid連接池

pla initials ima 重置數據 encoding tween false add cache

相對於dbcp、c3p0等連接池,druid性能更優越,提高可視化的sql監控頁面,簡直是目前最好用的數據庫連接池沒有之一。

那麽如何快速集成springboot+druid呢?

  1. 導包
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.9</version>
            </dependency>    

  2. 編寫Druid配置文件
    package com.xp.pay.gateway.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import org.springframework.beans.factory.annotation.Value;
    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 org.springframework.context.annotation.Primary; import javax.sql.DataSource; import java.sql.SQLException;
    /** * Created By xp. on 2019/1/28 */ @Configuration public class DruidConfiguration { @Value("${spring.datasource.url}") private String url; @Value("${spring.datasource.username}") private String username; @Value("${spring.datasource.password}") private String password; @Value("${spring.datasource.driverClassName}") private String driverClassName; @Value("${spring.datasource.initialSize}") private int initialSize; @Value("${spring.datasource.minIdle}") private int minIdle; @Value("${spring.datasource.maxActive}") private int maxActive; @Value("${spring.datasource.maxWait}") private int maxWait; @Value("${spring.datasource.timeBetweenEvictionRunsMillis}") private int timeBetweenEvictionRunsMillis; @Value("${spring.datasource.minEvictableIdleTimeMillis}") private int minEvictableIdleTimeMillis; @Value("${spring.datasource.validationQuery}") private String validationQuery; @Value("${spring.datasource.testWhileIdle}") private boolean testWhileIdle; @Value("${spring.datasource.testOnBorrow}") private boolean testOnBorrow; @Value("${spring.datasource.testOnReturn}") private boolean testOnReturn; @Value("${spring.datasource.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}") private int maxPoolPreparedStatementPerConnectionSize; @Value("${spring.datasource.filters}") private String filters; @Value("{spring.datasource.connectionProperties}") private String connectionProperties; @Value("${spring.datasource.logSlowSql}") private String logSlowSql; @Bean public ServletRegistrationBean druidServlet() { ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); // IP白名單 servletRegistrationBean.addInitParameter("allow", "192.168.36.1"); // IP黑名單(共同存在時,deny優先於allow) servletRegistrationBean.addInitParameter("deny", "192.168.1.100"); //控制臺管理用戶 servletRegistrationBean.addInitParameter("loginUsername", "admin"); servletRegistrationBean.addInitParameter("loginPassword", "admin"); //是否能夠重置數據 禁用HTML頁面上的“Reset All”功能 servletRegistrationBean.addInitParameter("resetEnable", "false"); servletRegistrationBean.addInitParameter("logSlowSql", logSlowSql); return servletRegistrationBean; } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } @Bean //聲明其為Bean實例 @Primary //在同樣的DataSource中,首先使用被標註的DataSource public DataSource dataSource() { DruidDataSource datasource = new DruidDataSource(); datasource.setUrl(url); datasource.setUsername(username); datasource.setPassword(password); datasource.setDriverClassName(driverClassName); //configuration datasource.setInitialSize(initialSize); datasource.setMinIdle(minIdle); datasource.setMaxActive(maxActive); datasource.setMaxWait(maxWait); datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); datasource.setValidationQuery(validationQuery); datasource.setTestWhileIdle(testWhileIdle); datasource.setTestOnBorrow(testOnBorrow); datasource.setTestOnReturn(testOnReturn); datasource.setPoolPreparedStatements(poolPreparedStatements); datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize); try { datasource.setFilters(filters); } catch (SQLException e) { System.err.println("druid configuration initialization filter: " + e); } datasource.setConnectionProperties(connectionProperties); return datasource; } }

  3. 編寫application.yml
    spring :
      datasource :
          type: com.alibaba.druid.pool.DruidDataSource
          driverClassName: com.mysql.jdbc.Driver
          driver-class-name: com.mysql.jdbc.Driver
          platform: mysql
          url: jdbc:mysql://127.0.0.1:3306/x_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&zeroDateTimeBehavior=convertToNull
          username: root
          password: yourPassword
          initialSize: 5   #初始化連接大小
          minIdle: 5   #最小連接池數量
          maxActive: 20 #最大連接池數量
          maxWait: 60000 #獲取連接時最大等待時間,單位毫秒
          maxPoolPreparedStatementPerConnectionSize: 20
          timeBetweenEvictionRunsMillis: 60000 #配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
          minEvictableIdleTimeMillis: 300000  #配置一個連接在池中最小生存的時間,單位是毫秒
          validationQuery: SELECT 1 FROM DUAL #測試連接
          testWhileIdle: true  #申請連接的時候檢測,建議配置為true,不影響性能,並且保證安全性
          testOnBorrow: false #獲取連接時執行檢測,建議關閉,影響性能
          testOnReturn: false  #歸還連接時執行檢測,建議關閉,影響性能
          poolPreparedStatements: false #是否開啟PSCache,PSCache對支持遊標的數據庫性能提升巨大,mysql下建議關閉
          filters: stat,wall,log4j2 #配置擴展插件,常用的插件有=>stat:監控統計  log4j:日誌  wall:防禦sql註入
          connectionProperties: ‘druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000‘ #慢SQL記錄
          logSlowSql: true #是否打印sql



  4. 訪問http://localhost:8080/druid/login.html
    技術分享圖片

springboot集成druid連接池