早期数据库访问(也没多少人上网)
①装载数据库驱动程序;
②通过jdbc建立数据库连接;
③访问数据库,执行sql语句;
④断开数据库连接。
对于并发量大的网站,会导致以下问题:
每一次web请求都要建立一次数据库连接,在同样的步骤下重复占用系统资源
不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去
如连接过多,也可能导致内存泄漏,服务器崩溃。
数据库连接池
连接池的作用是为了提高性能,将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对server端进行访问。
这样省略(复用)了创建连接和销毁连接的过程(tcp连接建立时的三次握手和销毁时的四次握手),从而在性能上得到了提高。
嚣张的druid(github的wiki上自称是java语言最好的数据库连接池)
在上次thymeleaf基础上进行集成
https://www.cnblogs.com/noneplus/p/11528129.html
<!-- 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://www.lhsxpumps.com/_localhost:8080/druid/
实时监控:
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==
修改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
如对本文有疑问, 点击进行留言回复!!
Android 4.0使用Kotlin调用C语言以及汇编语言
Java Class.forName()用法和newInstance()方法原理解析
网友评论