用来检测连接是否有效的sql,要求是一个查询语句,常用select ‘x’ 。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用 。validationQueryTimeout
单位:秒,检测连接是否有效的超时时间 。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 。testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 。testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性 。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效 。keepAlivefalse (1.0.28)连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作 。timeBetweenEvictionRunsMillis1分钟(1.0.14)有两个含义:1) Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接 。2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明numTestsPerEvictionRun30分钟(1.0.14)不再使用,一个DruidDataSource只支持一个EvictionRunminEvictableIdleTimeMillis
连接保持空闲而不被驱逐的最小时间connectionInitSqls
物理连接初始化的时候执行的sqlexceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接filters
属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wallproxyFilters
类型是List,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系
Druid提供以下几种Filter信息:
别名Filter类名defaultcom.alibaba.druid.filter.stat.StatFilterstatcom.alibaba.druid.filter.stat.StatFiltermergeStatcom.alibaba.druid.filter.stat.MergeStatFilterencodingcom.alibaba.druid.filter.encoding.EncodingConvertFilterlog4jcom.alibaba.druid.filter.logging.Log4jFilterlog4j2com.alibaba.druid.filter.logging.Log4j2Filterslf4jcom.alibaba.druid.filter.logging.Slf4jLogFiltercommonloggingcom.alibaba.druid.filter.logging.CommonsLogFilterwallcom.alibaba.druid.wall.WallFilter
4、Druid 监控支持多种形式,本文列举的是JAVA类创建Bean实例方式 。
@Beanpublic ServletRegistrationBean druidServlet() { logger.info("init Druid Servlet Configuration "); ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(); servletRegistrationBean.setServlet(new StatViewServlet()); servletRegistrationBean.addUrlMappings("/druid/*"); Map<String, String> initParameters = new HashMap<String, String>(); initParameters.put("loginUsername", "admin");// 用户名 initParameters.put("loginPassword", "admin");// 密码 initParameters.put("resetEnable", "false");// 禁用html页面上的“Reset All”功能 initParameters.put("allow", ""); // IP白名单 (没有配置或者为空,则允许所有访问) //initParameters.put("deny", "192.168.20.38");// IP黑名单 (存在共同时,deny优先于allow) servletRegistrationBean.setInitParameters(initParameters); return servletRegistrationBean;}@Beanpublic FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean;}
也可以采用另一种方式,在application.properties中添加Druid的监控配置
# druid连接池监控spring.datasource.druid.stat-view-servlet.login-username=adminspring.datasource.druid.stat-view-servlet.login-password=admin# 配置 StatFilterspring.datasource.druid.filter.stat.log-slow-sql=truespring.datasource.druid.filter.stat.slow-sql-millis=2000# 排除一些静态资源,以提高效率spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
配置完成后,并完成相关的数据库操作配置,启动Spring Boot应用程序 。
推荐阅读
- mysql数据库的主从同步,实现读写分离
- 如何处理没电的汽车电池
- 网络连接存在大量time_wait和close_wait的原因以及解决方法
- 这个牛逼哄哄的数据库开源了
- 蚂蚁开源 OceanBase,开源分布式数据库又迎新玩家
- OceanBase开源,11张图带你了解分布式数据库的核心知识
- 一键生成数据库文档,堪称数据库界的Swagger,有点厉害
- 银行数据库迁移至MySQL,竟被时间字段这玩意耍了……
- 服务器远程连接失败是什么原因?服务器远程连接不上怎么处理?
- 现在后端都在用什么数据库存储数据?