Druid数据库连接池

作者 : 开心源码 本文共7179个字,预计阅读时间需要18分钟 发布时间: 2022-05-12 共189人阅读

Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其余数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

Druid是一个JDBC组件,它包括三个部分:
1.基于Filter-Chain模式的插件体系。
2.DruidDataSource 高效可管理的数据库连接池。
3.SQLParser

所以Druid可以:
1、充任数据库连接池。
2、可以监控数据库访问性能
3、取得SQL执行日志


Spring Boot 配置Druid数据库连接池并查看数据库信息

image.png

maven:

<!-- druid数据库连接池 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.1.3</version>        </dependency>        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>        </dependency>

config

#开发配置spring:  profiles: dev  datasource:    type: com.alibaba.druid.pool.DruidDataSource    driverClassName: com.mysql.jdbc.Driver    driver-class-name: com.mysql.jdbc.Driver    platform: mysql    url: jdbc:mysql://xxx/bu_wang?useUnicode=true&characterEncoding=utf-8&useSSL=false    username: xxx    password: xxx    initialSize: 5    minIdle: 5    maxActive: 20    maxWait: 60000    timeBetweenEvictionRunsMillis: 60000    minEvictableIdleTimeMillis: 300000    validationQuery: SELECT1FROMDUAL    testWhileIdle: true    testOnBorrow: false    testOnReturn: false    filters: stat,wall,log4j    logSlowSql: true

DruidConfig.java

import java.sql.SQLException;import javax.sql.DataSource;import org.slf4j.Logger;import org.slf4j.LoggerFactory;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 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;@Configurationpublic class DruidConfig {    private static final Logger logger = LoggerFactory.getLogger(DruidConfig.class);    private static final String DB_PREFIX = "spring.datasource";    @Bean    public ServletRegistrationBean druidServlet() {        logger.info("init Druid Servlet Configuration ");        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");        // IP白名单        servletRegistrationBean.addInitParameter("allow", "*");        // 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");        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;    }    //处理 spring.datasource.filters=stat,wall,log4j 无法正常注册进去    @ConfigurationProperties(prefix = DB_PREFIX)    class IDataSourceProperties {        private String url;        private String username;        private String password;        private String driverClassName;        private int initialSize;        private int minIdle;        private int maxActive;        private int maxWait;        private int timeBetweenEvictionRunsMillis;        private int minEvictableIdleTimeMillis;        private String validationQuery;        private boolean testWhileIdle;        private boolean testOnBorrow;        private boolean testOnReturn;        private boolean poolPreparedStatements;        private int maxPoolPreparedStatementPerConnectionSize;        private String filters;        private String connectionProperties;        @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;        }        public String getUrl() {            return url;        }        public void setUrl(String url) {            this.url = url;        }        public String getUsername() {            return username;        }        public void setUsername(String username) {            this.username = username;        }        public String getPassword() {            return password;        }        public void setPassword(String password) {            this.password = password;        }        public String getDriverClassName() {            return driverClassName;        }        public void setDriverClassName(String driverClassName) {            this.driverClassName = driverClassName;        }        public int getInitialSize() {            return initialSize;        }        public void setInitialSize(int initialSize) {            this.initialSize = initialSize;        }        public int getMinIdle() {            return minIdle;        }        public void setMinIdle(int minIdle) {            this.minIdle = minIdle;        }        public int getMaxActive() {            return maxActive;        }        public void setMaxActive(int maxActive) {            this.maxActive = maxActive;        }        public int getMaxWait() {            return maxWait;        }        public void setMaxWait(int maxWait) {            this.maxWait = maxWait;        }        public int getTimeBetweenEvictionRunsMillis() {            return timeBetweenEvictionRunsMillis;        }        public void setTimeBetweenEvictionRunsMillis(int timeBetweenEvictionRunsMillis) {            this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;        }        public int getMinEvictableIdleTimeMillis() {            return minEvictableIdleTimeMillis;        }        public void setMinEvictableIdleTimeMillis(int minEvictableIdleTimeMillis) {            this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;        }        public String getValidationQuery() {            return validationQuery;        }        public void setValidationQuery(String validationQuery) {            this.validationQuery = validationQuery;        }        public boolean isTestWhileIdle() {            return testWhileIdle;        }        public void setTestWhileIdle(boolean testWhileIdle) {            this.testWhileIdle = testWhileIdle;        }        public boolean isTestOnBorrow() {            return testOnBorrow;        }        public void setTestOnBorrow(boolean testOnBorrow) {            this.testOnBorrow = testOnBorrow;        }        public boolean isTestOnReturn() {            return testOnReturn;        }        public void setTestOnReturn(boolean testOnReturn) {            this.testOnReturn = testOnReturn;        }        public boolean isPoolPreparedStatements() {            return poolPreparedStatements;        }        public void setPoolPreparedStatements(boolean poolPreparedStatements) {            this.poolPreparedStatements = poolPreparedStatements;        }        public int getMaxPoolPreparedStatementPerConnectionSize() {            return maxPoolPreparedStatementPerConnectionSize;        }        public void setMaxPoolPreparedStatementPerConnectionSize(int maxPoolPreparedStatementPerConnectionSize) {            this.maxPoolPreparedStatementPerConnectionSize = maxPoolPreparedStatementPerConnectionSize;        }        public String getFilters() {            return filters;        }        public void setFilters(String filters) {            this.filters = filters;        }        public String getConnectionProperties() {            return connectionProperties;        }        public void setConnectionProperties(String connectionProperties) {            this.connectionProperties = connectionProperties;        }    }}

运行之后访问: http://localhost:8080/druid/index.html
通过配置的账号密码登录可以查看数据库被查看次数等信息。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Druid数据库连接池

发表回复