转自:https://blog.csdn.net/cp026la/article/details/86508139
1. 引言
用户的每一次请求几乎都会访问数据库,访问数据库需要向数据库获取链接,而数据库创建连接是需要消耗资源的。数据库连接也是一种资源、使用数据库连接池等都是十分有必要的。本章小结一下Druid数据库连接池在SpringBoot1.5中的使用。
Druid 学习地址: https://github.com/alibaba/druid/wiki/FAQ 非常详细
2. 数据库连接池
C3P0、DBCP、Druid,这些是我常听的连接池,HikariCP 是近些年起来的连接池,是java性能方面最优的,springboot2.0 开始对它做了支持,而Druid 连接池内部使用的是公平锁,性能上有所下降,主要优点在监控这一块,事实上国内电商某宝对Druid性能作出了肯定,所以Druid性能也是毋庸置疑的。
3. 集成Druid连接池:
3.1 pom依赖(上一张章代码基础上):
maven依赖地址:https://mvnrepository.com/artifact/com.alibaba/druid
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>
3.2 连接池配置: (application.properties)
#################### 数据库基本连接信息 ##################### spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springbootdb?useSSL=false&useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ########################## druid数据源配置 start ############################# # 使用druid数据源 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource # 初始化的时候会创建一定数量的连接到连接池中 spring.datasource.initialSize=5 # 最小连接数 无论这些连接是否被使用都保留着这些数量的连接 spring.datasource.minIdle=5 # 连接池中最大的连接数,如果超过最大值,后面的连接将等待加入(使用公平锁排队进入) spring.datasource.maxActive=20 # 配置获取连接等待超时的时间 spring.datasource.maxWait=60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 spring.datasource.timeBetweenEvictionRunsMillis=60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 spring.datasource.minEvictableIdleTimeMillis=300000 # 连接测试 注意 MySQL orale 中有 dual表 sqlserver数据库没有 spring.datasource.validationQuery=SELECT 1 FROM DUAL # 申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性 spring.datasource.testWhileIdle=true # 获取连接时执行检测,建议关闭,影响性能 spring.datasource.testOnBorrow=false # 归还连接时执行检测,建议关闭,影响性能 spring.datasource.testOnReturn=false # 是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭 spring.datasource.poolPreparedStatements=true # 定每个连接上PSCache的大小 开启poolPreparedStatements后生效 spring.datasource.maxPoolPreparedStatementPerConnectionSize=20 # 扩展插件 配置监控统计拦截的filters 常用的插件有=>stat:监控统计 log4j:日志 wall:防御sql注入 #spring.datasource.filters=stat,wall,log4j spring.datasource.filters=stat,log4j # 通过connectProperties属性来打开mergeSql(合并sql)功能;慢SQL记录 默认是 3秒 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多个DruidDataSource的监控数据 #spring.datasource.useGlobalDataSourceStat=true ########################## druid数据源配置 end #############################
3.3 Druid配置类:
/** * @Auther: xf * @Date: 2018/11/26 22:10 * @Description: druid 配置类 * http://localhost:8080/druid/login.html */ @Configuration public class DruidConfig { /** * druid本身就是为了扩展jdbc的功能,而dataSource对象就是jdbc的配置 */ @Bean // 引入application.properties文件中以spring.datasource开头的信息 @ConfigurationProperties(prefix = "spring.datasource") public DataSource druidDataSource() { DruidDataSource druidDataSource = new DruidDataSource(); return druidDataSource; } /** * Druid 监控视图配置 */ @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); // ip 白名单 没有配置则允许所有访问 servletRegistrationBean.addInitParameter("allow","127.0.0.1"); // ip 黑名单 优先级大于白名单 servletRegistrationBean.addInitParameter("deny","192.168.0.19");//设置ip黑名单,优先级高于白名单 //设置控制台管理用户 servletRegistrationBean.addInitParameter("loginUsername","admin"); servletRegistrationBean.addInitParameter("loginPassword","admin"); //是否可以重置数据 servletRegistrationBean.addInitParameter("resetEnable","true"); return servletRegistrationBean; } /** * 监控拦截器 */ @Bean public FilterRegistrationBean statFilter(){ //创建过滤器 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //设置过滤器过滤路径 filterRegistrationBean.addUrlPatterns("/*"); //忽略过滤的形式 filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"); return filterRegistrationBean; } }
3.4 Druid监控:(请求接口访问数据库)
访问:http://localhost:8080/druid/index.html 或 login.html:
看到相应的监控信息,可以根据这些指标进行相应的优化。
至此,springboot 配置Druid完成。