Druid是一个JDBC组件,它包括三部分: DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池。 SQLParser
常用配置
sring.datasource.name=druidDataSource
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/test
spring.datasource.druid.username=root
spring.datasource.druid.password=root
# 启动程序时,在连接池中初始化多少个连接
spring.datasource.druid.initial-size=5
# 连接池中最多支持多少个活动会话
spring.datasource.druid.maxActive=20
# 程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池
# 没有可用连接,单位毫秒,设置-1时表示无限等待
spring.datasource.druid.maxWait=100
# 检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
# 池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将回收该连接,要小于防火墙超时设置
spring.datasource.druid.minEvictableIdleTimeMillis=300000
# 程序没有close连接且空闲时长超过 minEvictableIdleTimeMillis,则会执
# 行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超
# 过minIdle指定的连接个数。
spring.datasource.druid.keep-alive=true
# 回收空闲连接时,将保证至少有minIdle个连接.
spring.datasource.druid.min-idle=5
# 检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据库执行该SQL, 如果
# 正常返回,则表示连接可用,否则表示连接不可用
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
# 当程序请求连接,池在分配连接时,是否先检查该连接是否有效。(高效)
spring.datasource.druid.testWhileIdle=true
# 程序 申请 连接时,进行连接有效性检查(低效,影响性能)
spring.datasource.druid.testOnBorrow=false
# 程序 返还 连接时,进行连接有效性检查(低效,影响性能)
spring.datasource.druid.testOnReturn=false
# 打开PSCache,缓存通过以下两个方法发起的SQL:
# public PreparedStatement prepareStatement(String sql)
# public PreparedStatement prepareStatement(String sql,
# int resultSetType, int resultSetConcurrency)
spring.datasource.druid.poolPreparedStatements=true
# 每个连接最多缓存多少个SQL
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计
# 监控统计: stat
# 日志监控: log4j 或者 slf4j
# 防御SQL注入: wall
spring.datasource.druid.filters=stat,wall,log4j
# 连接属性。比如设置一些连接池统计方面的配置。通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#spring.datasource.useGlobalDataSourceStat=true
数据源属性
@ConfigurationProperties(prefix = "spring.datasource.druid")
public class DruidDataSourceProperties {
private String driverClassName;
private String url;
private String username;
private String password;
...
// get set方法...
}
数据源配置
@Configuration
@EnableConfigurationProperties({DruidDataSourceProperties.class})
public class DruidConfig {
@Autowired
private DruidDataSourceProperties properties;
@Bean
@ConditionalOnMissingBean
public DataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(properties.getDriverClassName());
druidDataSource.setUrl(properties.getUrl());
druidDataSource.setUsername(properties.getUsername());
druidDataSource.setPassword(properties.getPassword());
// ...
try {
druidDataSource.setFilters(properties.getFilters());
druidDataSource.init();
} catch (SQLException e) {
e.printStackTrace();
}
return druidDataSource;
}
/**
* 注册Servlet信息, 配置监控视图
*
* @return
*/
@Bean
@ConditionalOnMissingBean
public ServletRegistrationBean<Servlet> druidServlet() {
ServletRegistrationBean<Servlet> servletRegistrationBean = new ServletRegistrationBean<Servlet>(new StatViewServlet(), "/druid/*");
//白名单:
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
// IP黑名单 (存在共同时,deny优先于allow):如果满足deny的话提示:Sorry, you are not permitted to view this page
// servletRegistrationBean.addInitParameter("deny", "192.168.1.1");
//登录查看信息的账号密码, 用于登录Druid监控后台
servletRegistrationBean.addInitParameter("loginUsername", "admin");
servletRegistrationBean.addInitParameter("loginPassword", "admin");
//是否能够重置数据.
servletRegistrationBean.addInitParameter("resetEnable", "true");
return servletRegistrationBean;
}
/**
* 注册Filter信息, 监控拦截器
*
* @return
*/
@Bean
@ConditionalOnMissingBean
public FilterRegistrationBean<Filter> filterRegistrationBean() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<Filter>();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
return filterRegistrationBean;
}
}
配置log4j.properties 在控制台打印 sql语句
log4j.logger.druid.sql.ResultSet=INFO
log4j.logger.druid.sql.Connection=DEBUG
log4j.logger.druid.sql.DataSource=DEBUG
log4j.logger.druid.sql.Statement=DEBUG
log4j.logger.druid.sql.PreparedStatement=DEBUG