SpringBoot集成Druid连接池
程序员文章站
2022-10-26 09:22:03
连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对Server端进行访问。
这样省略(复用)了创建连接和销毁连接的过程(TCP连接建立时的三次握手和销毁时的四次握手),从而在性能上得到了提高。 ......
关于数据库连接池
-
早期数据库访问(也没多少人上网)
①装载数据库驱动程序;
②通过jdbc建立数据库连接;
③访问数据库,执行sql语句;
④断开数据库连接。
对于并发量大的网站,会导致以下问题:
每一次web请求都要建立一次数据库连接,在同样的步骤下重复占用系统资源
-
不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去
如连接过多,也可能导致内存泄漏,服务器崩溃。
-
数据库连接池
连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对server端进行访问。
这样省略(复用)了创建连接和销毁连接的过程(tcp连接建立时的三次握手和销毁时的四次握手),从而在性能上得到了提高。
-
嚣张的druid(github的wiki上自称是java语言最好的数据库连接池)
集成druid
在上次thymeleaf基础上进行集成
https://www.cnblogs.com/noneplus/p/11528129.html
- 引入pom
<!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupid>com.alibaba</groupid> <artifactid>druid</artifactid> <version>1.1.20</version> </dependency>
-
yaml
spring: datasource: # 数据源基本配置 username: noneplus password: noneplus564925080! driver-class-name: com.mysql.cj.jdbc.driver url: jdbc:mysql://47.103.6.247:3306/user?servertimezone=utc type: com.alibaba.druid.pool.druiddatasource # druid数据源配置 initialsize: 5 minidle: 5 maxactive: 20 maxwait: 60000 timebetweenevictionrunsmillis: 60000 minevictableidletimemillis: 300000 validationquery: select 1 from dual testwhileidle: true testonborrow: false testonreturn: false poolpreparedstatements: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j maxpoolpreparedstatementperconnectionsize: 20 useglobaldatasourcestat: true connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=500 thymeleaf: cache: false pagehelper: helperdialect: mysql reasonable: true supportmethodsarguments: true pagesizezero: false #pagesize=0
-
druidconfig
package zkrun.top.web.config; import com.alibaba.druid.pool.druiddatasource; import com.alibaba.druid.support.http.statviewservlet; import com.alibaba.druid.support.http.webstatfilter; 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 javax.sql.datasource; import java.util.arrays; import java.util.hashmap; import java.util.map; @configuration public class druidconfig { //加载application.yaml中的druid配置 @configurationproperties(prefix = "spring.datasource") @bean public datasource druid(){ return new druiddatasource(); } //配置druid的监控 //1、配置一个管理后台的servlet @bean public servletregistrationbean statviewservlet(){ servletregistrationbean bean = new servletregistrationbean(new statviewservlet(), "/druid/*"); map<string,string> initparams = new hashmap<>(); initparams.put("loginusername","hq"); initparams.put("loginpassword","564925080"); initparams.put("allow","");//默认就是允许所有访问 initparams.put("deny","192.168.15.21"); bean.setinitparameters(initparams); return bean; } //2、配置一个web监控的filter @bean public filterregistrationbean webstatfilter(){ filterregistrationbean bean = new filterregistrationbean(); bean.setfilter(new webstatfilter()); map<string,string> initparams = new hashmap<>(); initparams.put("exclusions","*.js,*.css,/druid/*"); bean.setinitparameters(initparams); bean.seturlpatterns(arrays.aslist("/*")); return bean; } }
-
log4j
<dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>1.2.17</version> </dependency>
测试
访问:
http://localhost:8080/druid/
实时监控:
数据源配置文件密码加密显示
- 找到jar包,在终端打开:
- 生成密码
java -cp druid-1.0.16.jar com.alibaba.druid.filter.config.configtools yourpassword
其中druid-1.0.16.jar换成正在使用对应的版本,yourpassword改成数据库连接的密码。
生成privatekey和publickey以及password
privatekey:miibvaibadanbgkqhkig9w0baqefaascat4wgge6ageaakeagix0+n2diiixwasa642qri8hto2xg1litfedfwgeg9g1wvlarf69gq+wdbpphy63ddbry8d3i/vnzmag0bgxwwidaqabakaqfidiuwlsn4hjwcbaovskk2regp6hjq 96p8f79vxgm/fneqyzlgiiqvviutsowssqses+c/cdoxyegfddiespaieauq1lcfubph7mwzwlbii0gm4+/1tnqed+w9lm3qgjyk0ciqcyepaxbry8vk8puzmokr74kffbfg5wqbajunyym1pmtwigzttpfx8metxladzm6exqvzi0x+j4qq1ynan 6p0r+pckcifpz8ei5c3kre6oh5bt0nechxqwnnjgvc1wl90xtww1vaieankdxli45e1e8jgpcq4tg90pmdlklrcxunbihurohyew= publickey:mfwwdqyjkozihvcnaqebbqadswawsajbaiil9pp9nyiisvgegounqqypiu6nsynsylx3gxcbhiprtcl5wqxevykvsawat4wotww268vhdyp7zwtghtgxscmcaweaaq== password:memmpyhaoufvuar37bmbumgw76wvslad7pnflrbup5h4q6szvwmdsyacnzval2hy2man1rc6scjmywrse1xpkw==
- yaml配置
修改password,添加公钥。
spring: datasource: # 数据源基本配置 username: noneplus password: memmpyhaoufvuar37bmbumgw76wvslad7pnflrbup5h4q6szvwmdsyacnzval2hy2man1rc6scjmywrse1xpkw== # 1.配置生成的password driver-class-name: com.mysql.cj.jdbc.driver url: jdbc:mysql://47.103.6.247:3306/user?servertimezone=utc type: com.alibaba.druid.pool.druiddatasource # druid数据源配置 initialsize: 5 minidle: 5 maxactive: 20 maxwait: 60000 timebetweenevictionrunsmillis: 60000 minevictableidletimemillis: 300000 validationquery: select 1 from dual testwhileidle: true testonborrow: false testonreturn: false poolpreparedstatements: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j,config # 3.添加config maxpoolpreparedstatementperconnectionsize: 20 useglobaldatasourcestat: true # 2.开启加密,配置公钥 connectionproperties: druid.stat.mergesql=true;druid.stat.slowsqlmillis=500;config.decrypt=true;config.decrypt.key=mfwwdqyjkozihvcnaqebbqadswawsajbaiil9pp9nyiisvgegounqqypiu6nsynsylx3gxcbhiprtcl5wqxevykvsawat4wotww268vhdyp7zwtghtgxscmcaweaaq== thymeleaf: cache: false pagehelper: helperdialect: mysql reasonable: true supportmethodsarguments: true pagesizezero: false #pagesize=0
代码参考
https://github.com/hcj-shadow/springbootplus
推荐阅读
-
Springboot 2.0.x 集成基于Centos7的Redis集群安装及配置
-
小白的springboot之路(十二)、集成log4j2日志
-
springcloud Springboot vue.js Activiti6 前后分离 跨域 工作流 集成代码生成器 shiro权限
-
SpringBoot中使用com.alibaba.druid.filter.config.ConfigTools对数据库密码加密的方法
-
Shiro Demo:SpringBoot+Shiro+Druid+MyBatis
-
SpringBoot配置Druid数据监控代码实例
-
Springboot Activiti6 工作流 集成代码生成器 shiro 权限 vue.js html 跨域 前后分离
-
springboot中加入druid对sql进行监控
-
JSP Spring中Druid连接池配置详解
-
springboot集成mybatisplus的方法