# 04-数据库连接池

# 一、Druid

  1. 引入依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.22</version>
    </dependency>
    
  2. 配置

    spring:
      datasource:
        druid:
          db-type: mysql
          initial-size: 5
          min-idle: 5
          max-active: 30
          validationQuery: SELECT 1
          web-stat-filter:
            enabled: true
            exclusions: /druid/*
            url-pattern: /*
          stat-view-servlet:
            url-pattern: /druid/*
            login-username: druid
            login-password: druid123123
            reset-enable: false
    
  3. 配置

    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
    import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
    import org.springframework.aop.Advisor;
    import org.springframework.aop.support.DefaultPointcutAdvisor;
    import org.springframework.aop.support.JdkRegexpMethodPointcut;
    import org.springframework.beans.factory.annotation.Autowired;
    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;
    
    /**
     * web配置
     *
     * @Author qixiaodong
     * @Date 2020/8/28 16:58
     */
    @Configuration
    public class DruidConfig {
        @Autowired
        private DruidStatProperties druidStatProperties;
    
        /**
         * druidServlet注册
         */
        @Bean
        public ServletRegistrationBean druidServletRegistration() {
            DruidStatProperties.StatViewServlet statViewServlet = druidStatProperties.getStatViewServlet();
            ServletRegistrationBean registration = new ServletRegistrationBean(new StatViewServlet(),
                    statViewServlet.getUrlPattern());
            // 控制台管理用户名
            registration.addInitParameter("loginUsername", statViewServlet.getLoginUsername());
            // 控制台管理密码
            registration.addInitParameter("loginPassword", statViewServlet.getLoginPassword());
            // 是否可以重置数据源,禁用HTML页面上的“Reset All”功能
            registration.addInitParameter("resetEnable", statViewServlet.getResetEnable());
            return registration;
        }
    
        /**
         * druid监控 配置URI拦截策略
         */
        @Bean
        public FilterRegistrationBean druidStatFilter() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
            DruidStatProperties.WebStatFilter webStatFilter = druidStatProperties.getWebStatFilter();
            //添加过滤规则.
            filterRegistrationBean.addUrlPatterns(webStatFilter.getUrlPattern());
    
            //添加不需要忽略的格式信息.
            filterRegistrationBean.addInitParameter("exclusions", webStatFilter.getExclusions());
            //用于session监控页面的用户名显示 需要登录后主动将username注入到session里
            filterRegistrationBean.addInitParameter("principalSessionName", "username");
            return filterRegistrationBean;
        }
    
        /**
         * druid数据库连接池监控
         */
        @Bean
        public DruidStatInterceptor druidStatInterceptor() {
            return new DruidStatInterceptor();
        }
    
        @Bean
        public JdkRegexpMethodPointcut druidStatPointcut() {
            JdkRegexpMethodPointcut druidStatPointcut = new JdkRegexpMethodPointcut();
            String patterns = "com.feihe.*.service.*";
            //可以set多个
            druidStatPointcut.setPatterns(patterns);
            return druidStatPointcut;
        }
    
        /**
         * druid数据库连接池监控
         */
        @Bean
        public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
            BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
            beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
            beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
            return beanTypeAutoProxyCreator;
        }
    
        /**
         * druid 为druidStatPointcut添加拦截
         */
        @Bean
        public Advisor druidStatAdvisor() {
            return new DefaultPointcutAdvisor(druidStatPointcut(), druidStatInterceptor());
        }
    }
    
    
Last Updated: 12/15/2023, 8:18:50 AM