• Springboot项目配置druid数据库连接池,并监控统计功能


     pom.xml配置依赖

    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>druid</artifactId>
         <version>1.1.6</version>
    </dependency> 

    资源文件配置信息

    不管是yml文件还是properties文件,都使用以下配置

    # 数据库访问配置
    spring.datasource.type: com.alibaba.druid.pool.DruidDataSource
    spring.datasource.url: jdbc:mysql://10.170.1.16:3306/cispapi?useUnicode=true&characterEncoding=utf-8
    spring.datasource.username: root
    spring.datasource.password: Sinoway123
    spring.datasource.driverClassName: com.mysql.jdbc.Driver
    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    spring.datasource.initialSize: 5
    spring.datasource.minIdle: 5
    spring.datasource.maxActive: 20
    # 配置获取连接等待超时的时间
    spring.datasource.maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.minEvictableIdleTimeMillis: 300000
    spring.datasource.validationQuery: SELECT 1 FROM DUAL
    spring.datasource.testWhileIdle: true
    spring.datasource.testOnBorrow: false
    spring.datasource.testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小 
    spring.datasource.poolPreparedStatements: true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    spring.datasource.filters: stat,wall,log4j
    spring.datasource.logSlowSql: true
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    spring.datasource.connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

     

    数据源配置类

    import java.sql.SQLException;
    
    import javax.sql.DataSource;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    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 com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    
    @Configuration
    public class DruidDBConfig {
        private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
    
        @Value("${spring.datasource.url}")
        private String dbUrl;
    
        @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;
    
        // 配置监控统计功能
        // 访问路径 http://127.0.0.1:8081/CISP/druid/login.html
        // 1.配置Servlet
        @Bean
        public ServletRegistrationBean druidServlet() {
            ServletRegistrationBean reg = new ServletRegistrationBean();
            reg.setServlet(new StatViewServlet());
            reg.addUrlMappings("/druid/*");
            reg.addInitParameter("loginUsername", username);// 用户名也可以自己设置,及直接写死
            reg.addInitParameter("loginPassword", password);// 密码也可以自己设置,及直接写死
            reg.addInitParameter("logSlowSql", logSlowSql);// 慢SQL记录
            reg.addInitParameter("allow", "101.6.244.30");// IP白名单 (没有配置或者为空,则允许所有访问,若配置多个则用逗号隔开)
            reg.addInitParameter("resetEnable", "false");// 禁用HTML页面上的“Reset All”功能
            return reg;
        }
    
        // 2.配置Filter
        @Bean
        public FilterRegistrationBean filterRegistrationBean() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(new WebStatFilter());
            filterRegistrationBean.addUrlPatterns("/*");
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");// 忽略资源
            filterRegistrationBean.addInitParameter("profileEnable", "true");
            return filterRegistrationBean;
        }
    
        @Bean // 声明其为Bean实例
        @Primary // 在同样的DataSource中,首先使用被标注的DataSource
        public DataSource dataSource() {
            DruidDataSource datasource = new DruidDataSource();
    
            datasource.setUrl(this.dbUrl);
            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) {
                logger.error("druid configuration initialization filter", e);
            }
            datasource.setConnectionProperties(connectionProperties);
    
            return datasource;
        }
    }

    然后启动项目,访问:

    http://IP:port/CISP/druid/login.html

    输入你设置的用户名和密码

    点击sign in

    在项目中进行一次数据库查询之后,

    在这里你就可以查看配置的连接池,以及数据库相关信息

    常见问题,也可以访问

    https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

  • 相关阅读:
    HyperV Server 2008 R2 包含简体中文 下载
    Javascript实现把网页中table的内容导入到excel中的几种方法
    C# WebRequest WebClient Post请求 无乱码
    聊聊我对开发项目选技术的看法
    聊聊我对开发项目选技术的看法2
    企业的虚拟化发展
    不成文的期望
    Deep Zoom Composer 小工具 三步 5分钟
    2009829 周末
    复制文章时自动在文章末尾加上来源网址的代码
  • 原文地址:https://www.cnblogs.com/java-spring/p/8427515.html
Copyright © 2020-2023  润新知