• 【SpringBoot | Druid】SpringBoot整合Druid


    SpringBoot整合Druid

    Druid是个十分强大的后端管理工具,具体的功能和用途请问阿里爸爸

    1. 在pom.xml中导入包

    <!-- alibaba 的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.18</version>
            </dependency>
    
    

    2. 配置Druid

    • 首先在application.yml中配置druid
    spring:
      datasource:
        password: xxx
        # 如果存在多个数据源,监控的时候可以通过名字来区分开来
        name: mysql
        # 使用druid数据源
        type: com.alibaba.druid.pool.DruidDataSource
        # 驱动名字
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 连接数据库的url
        url: jdbc:mysql://localhost:3306/xxx?serverTimezone=Asia/Shanghai&allowMultiQueries=true
        # 连接数据库的账号
        username: xxx
        #  连接数据库的密码
        # 扩展插件
        # 监控统计用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall
        filters: stat, wall
        # 最大连接池数量
        maxActive: 20
        # 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
        initialSize: 5
        # 获取连接时最大等待时间,单位毫秒
        maxWait: 60000
        # 最小连接池数量
        minIdle: 1
        timeBetweenEvictionRunsMillis: 60000
        # 连接保持空闲而不被驱逐的最长时间
        minEvictableIdleTimeMillis: 300000
        # 用来检测连接是否有效的sql,要求是一个查询语句
        # 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用
        validationQuery: select count(1) from 'table'
        # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效
        testWhileIdle: true
        # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
        testOnBorrow: false
        # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
        testOnReturn: false
        # 是否缓存preparedStatement,即PSCache
        poolPreparedStatements: false
        # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true
        maxOpenPreparedStatements: -1
    
    • 其次编写Druid配置类
    package xxx.xxx.xxx.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.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.Collections;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 配置 Druid
     *
     * @author axiang 
     */
    @Configuration
    public class DruidConfig {
    
        /* 设置Druid配置的默认前缀为 spring.datasource */
        @ConfigurationProperties(prefix = "spring.datasource")
        @Bean
        public DataSource druid() {
            return new DruidDataSource();
        }
    
        /* 自定义配置Druid管理界面的访问账户名 */
        @Value("${xxx.config.druid.name}")
        private String name;
    
        /* 自定义配置Druid管理界面的访问密码 */
        @Value("${xxx.config.druid.pwd}")
        private String pwd;
    
        /**
         * 配置Druid的监控
         * 配置一个管理后台的servlet
         *
         * @return
         */
        @Bean
        public ServletRegistrationBean statViewServlet() {
            ServletRegistrationBean<StatViewServlet> bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
            Map<String, String> initParams = new HashMap<>(10);
            //账号
            initParams.put("loginUsername", name);
            //密码
            initParams.put("loginPassword", pwd);
            //默认允许所有
            initParams.put("allow", "");
            //不允许的黑名单ip
            initParams.put("deny", "");
            bean.setInitParameters(initParams);
            return bean;
        }
    
        /**
         * 配置一个监控的filter
         *
         * @return
         */
        @Bean
        public FilterRegistrationBean webStatFilter() {
            FilterRegistrationBean bean = new FilterRegistrationBean();
            bean.setFilter(new WebStatFilter());
    
            Map<String, String> initParams = new HashMap<>(10);
            initParams.put("exclusions", "*.js,*.css,/druid/*");
    
            bean.setInitParameters(initParams);
            bean.setUrlPatterns(Collections.singletonList("/*"));
    
            return bean;
        }
    }
    
    

    3. 访问和测试

    输入下面的IP,进入页面访问Druid内容

    http://[IP地址]:[端口号]/[项目部署名]/druid/index.html
    
  • 相关阅读:
    左边的div导航根据右部div内容的高自动调整
    IE中在a标签里的图片会显示边框
    MVC4中视图获取控制器中返回的json格式数据
    Oracle 分页
    各个数据库中top 的表示方法
    AndroidPageObjectTest_TimeOutManagement.java
    AndroidSlideTest.java
    区分:AndroidDriver, iOSDriver, AppiumDriver and Remote WebDriver
    区分:WebElement, MobileElement, AndroidElement, and iosElement
    AndroidTest.java
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/11913397.html
Copyright © 2020-2023  润新知