数据库连接池Druid
-
数据库连接池负责建立,管理和释放数据库连接,允许应用重用已建立的数据库连接,而不是重新建立一个;
-
Druid的使用,首先新建一个DruidDataSource的bean,构造设置连接池参数,这样每次调用getConnection()方法,即是从连接池中获取连接,而非每次都新建立数据库连接。结合jdbcTemplate,只需将其作为jdbcTemplate的构造参数传入即可;
-
Druid连接池参数,
initialSize,minIdle,maxActive :连接池的初始化连接数,最小空闲连接数,最大连接数
maxWait:获取连接的最大等待超时时间
timeBetweenEvictionRunsMillis:检测并关闭空闲连接的间隔时间
minEvictableIdleTimeMillis:数据库连接在连接池中的最小生存时间
filters:配置用于监控的拦截器,常用的有stat,wall等
-
Filters介绍,wallFilter会拦截sql进行检测,防止sql注入,并会读取META-INF/druid/wall/myql目录下的配置文件来进行过滤,如设置不允许delete等操作,默认会对认为攻击的sql抛出SQLException;StatFilter用于慢Sql统计,通过属性druid.stat.slowSqlMillis设置临界时间;还可以自定义扩展Filter,拦截JDBC方法加入自定义逻辑;
-
Druid的sql执行日志,通过应用中的日志组件拦截druid.sql包的日志即可;
-
sql监控信息展示,通过spring.datasource.druid.statViewServlet=StatViewServlet配置,便可以在/projectName/druid/index.html的页面访问,web-jdbc监控信息的展示,通过spring.datasource.druid.webStatFilter=WebStatFilter配置,Spring容器的监控信息,通过DruidStatInterceptor配置,这样sql,web,spring监控信息均可通过druid/index.html页面展示了,并且可以设置ip限制;
-
Druid还提供了若干工具类,SQLUtils:格式化sql,如添加查询参数,SQLUtils.addCondition(…);PageUtils:分页工具类,如添加分页,PagerUtils.limit(sql, JdbcConstants.ORACLE,20,10);
-
更多配置参数查看:https://github.com/alibaba/druid/wiki,https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter;
常见问题排除
-
连接池泄漏:当应用配置了webStatFilter之后,在内置监控页面weburi-detail.html中,查看JdbcPoolConnectionOpenCount和JdbcPoolConnectionCloseCount属性,如果不相等,就是泄漏了;
-
往数据库插入中文数据时有乱码出现:在数据库URL后面添加?useUnicode=true&characterEncoding=UTF-8;
-
数据库主键用自增的id好,还是string好:自增id好,维护主键消耗小;
-
HashMap中的key和JdbcTemplate获取的Map的key区分大小写吗:HashMap区分,JdbcTemplate获取的Map是不区分的;
-
存储过程使用示例:
CallableStatement:存储过程接口
// mysql中创建存储过程
// 第一句话表示用//作为分隔符
delimiter //
create procedure add_pro(a int, b int, out sum int)
begin
set sum = a + b;
end;
//
CallableStatement callStat = con.prepareCall("{call add_pro(?,?,?)}");
callS.setInt(1);callS.setInt(2);callS.registerOutParameter(3,Types.INTEGER);
callS.execute();
// 得到输出
Integer out = callS.getInt(3);
来源:CSDN
作者:qq_28128035
链接:https://blog.csdn.net/qq_28128035/article/details/104123090