SpringBoot集成Druid连接池
程序员文章站
2022-05-26 12:40:26
连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对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集成Kafka实现producer和consumer的示例代码
-
springboot集成schedule实现定时任务
-
Spring Boot使用Druid连接池的示例代码
-
SpringBoot集成ElaticJob定时器的实现代码
-
springboot集成rabbitMQ之对象传输的方法
-
详解SpringBoot集成Redis来实现缓存技术方案
-
Springboot集成Kafka实现producer和consumer的示例代码
-
详解Spring Boot下Druid连接池的使用配置分析
-
详解SpringBoot之集成Spring AOP
-
springboot集成schedule实现定时任务