springboot整合druid


1、導入依存


        
            com.alibaba
            druid-spring-boot-starter
            ${druid.version}
        
 
2、appication.yml
spring:
  datasource:
    #       
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/tmall?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: ok

    #       
    #     、  、  。          ,   (   *2+     ),           
    initialSize: 5 #             。          init  ,     getConnection 
    minIdle: 5
    maxActive: 20

    #    (   druid      )         
    #           ,    。   maxWait  ,       ,         ,          useUnfairLock   true      
    maxWait: 60000
    #             ,           ,    。  testWhileIdle     
    timeBetweenEvictionRunsMillis: 60000
    #               。Destory                             minEvictableIdleTimeMillis,       
    minEvictableIdleTimeMillis: 300000

    #     sql
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true #     true,     ,       ,        timeBetweenEvictionRunsMillis,   validationQuery
    #          ,      
    testOnBorrow: false #       validationQuery        ,           
    testOnReturn: false #       validationQuery        ,           

    #   PSCache,          PSCache    
    #druid        PreparedStatementCache   ,      sql        ,     PreparedStatement     ,
    #          PreparedStatementCache,  oracle         ,      ,    mysql,      。
    #            ,PSCache   jvm,   =   *PSCache     *  PSCache     
    #    preparedStatement,   PSCache。#PSCache               ,   oracle。 mysql5.5        PSCache  ,     。5.5      PSCache,    
    poolPreparedStatements: true
    # Druid ,    Oracle PSCache         ,            ,   100
    maxPoolPreparedStatementPerConnectionSize: 20

    #        ,             ,
    #      :
    #      filter:stat
    #    filter:log4j
    #   sql   filter:wall
    filters: stat,wall
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

    #          
    removeAbandoned : true
    #    , 
    removeAbandonedTimeout : 180
    #    removeabandoned   ,                 
    logAbandoned: true
 
3、DataSourceConfig
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 DataSourceConfig {

    /**
     *        druid        ,      。        java.sql.Datasource        ,
     *     datasource  。          ,      Druid     
     */
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        //         
        dataSource.setBreakAfterAcquireFailure(true);
        //    
        dataSource.setConnectionErrorRetryAttempts(0);

        return dataSource;
    }

    /**
     * Druid                ,               sql  。          
     *   Druid   
     *          Servlet
     * http://localhost:8080/druid/login.html
     */
    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");

        Map initParams = new HashMap<>();
        //   
        initParams.put("loginUsername","admin");
        //    
        initParams.put("loginPassword","admin");
        //          
        initParams.put("allow","");
        //    
        //initParams.put("deny","127.0.0.1");
        registrationBean.setInitParameters(initParams);
        return registrationBean;
    }

    /**
     *     web   filter
     */
    @Bean
    public FilterRegistrationBean webStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());

        Map initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");

        bean.setInitParameters(initParams);

        bean.setUrlPatterns(Arrays.asList("/*"));

        return  bean;
    }

}