Druid数据库连接池

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数据库连接池并查看数据库信息
Druid数据库连接池
文章图片
image.png maven:
com.alibaba druid 1.1.3 log4j log4j 1.2.17

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; @Configuration public 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; } }}

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

    推荐阅读