数据库连接池

本文记录了一次服务器环境配置的过程,包括通过xshell连接ECS,修改MySQL配置以允许远程连接,配置防火墙开启3306端口,以及处理8080端口问题。同时,部署了Servlet demo测试数据库稳定性,并探讨了数据库连接池的重要性,介绍了多种开源连接池如C3P0、Druid等,强调了连接池在优化性能和资源管理上的作用。作者计划进一步研究连接池的实现细节。
摘要由CSDN通过智能技术生成

终于将服务器的配置终于配置好了---->进过一次全部的重新配置服务器端的环境,在最开始的自己没有注意到的一些比较重要还有一些比较关键的困难点,还有重要的的环境的配置文件,例如,mysql的远程连接的DB的配置那个是我问题出现最大的地方,那个最先是师兄帮助我完成的,到后面自己来完成的时候自己要把比较模糊的额知识点串联起来

1.主要是用xshell连接云服务器ECS,修改/etc/mysql/my.cnf

或者 /etc/mysql/mysql.conf.d/mysqld.cnf

将bind-address = 127.0.0.1改为#bind-address = 0.0.0.0。(这一步很关键)

2.就是防火墙的关闭(这个决定那个3306的端口---->也可以不用关闭开启3306端口)

firewall-cmd --zone=public --add-port=3306/tcp --permanent (--permanent永久生效,没有此参数重启后失效)

重新载入

firewall-cmd --reload

基本问题就出在这里

3.还有昨天晚上那个8080端口不能用的情况

我今天重新吧那个安全组的配置把8080端口删除---->在重新建立一个安全组的8080------>这样就可以访问论文47.94.14.145:8080/

我还部署了一个简单的Servlet的demo到云端测试我的远程DB的数据库的稳定性---->有怕像以前的那个样子----->远程的DB出问题导致我全部的配置文件出问题----->还有那个防火墙的知识可能要学一下---->什么时候开启--->什么时候关闭

感觉这一天的重新配置服务器的环境变量---->感觉对云端的结构和配置的文件怎么弄还有出现问题,要怎么去找问题的位置,还有出现对应的情况怎么去处理

最后这个是我用war包在云端部署的一个简单的Servlet 的demo

47.94.14.145:8080/Servl


--------------------------------------------->以上是多前面的环境的重新配置的一个简单的总结(感觉敲命令行感觉不错---->只是有的时候有点不直观---->感觉最近的重新配置环境的系统还是可以,有好多学到--->最后我还是学一下怎么将云端的系统数据备个份---->后面出问题了没有那么痛苦重新来)


前面的maven跑起来的单元测试----->已经跑过了

下面就简单的跑一下

最开始---->将本地的项目上传到GitHub上面

v2-dd5db0723bc30620b61b38cce7696d76_b.jpg


在到云端的服务器上面clone这个maven的项目


v2-40fce4d6b54aea9227bc36b398b91402_b.jpg


最后进入clone的项目运行maven ------>mvn test

第一跑要下载很多jar 包


v2-dcb134d3f295503e553971a8b86da336_b.jpg


如果想要生成war包在target里面 maven install ----->就可以了


v2-de624dde8ed814e3d7ea769798f9db9b_b.jpg


要生成war包


v2-d03781813aac463be49cc85c4cfdc244_b.jpg


最后在把生成的maven.war包--->移动到tomcat/webapps里面再到


v2-1e9c6434edfe327aa188672000e23441_b.jpg


tomcat/bin运行./startup.sh启动tomcat------>在浏览器中输入47.94.14.145:8080/maven


接下来就是连接池----->开始了解连接池----->

1.连接池的作用

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

2.在Java中开源的数据库连接池有以下几种 :

1、C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate[2] 一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。(听说过------>用过)

2、Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。

3、Jakarta DBCP:DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池。DBCP可以直接的在应用程序中使用。

4、DDConnectionBroker:是一个简单、轻量级的数据库连接池。

5、DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。

6、XAPool:是一个XA数据库连接池。它实现了javax.sql.XADataSource并提供了连接池工具。

7、Primrose:是一个Java开发的数据库连接池。当前支持的容器包括Tomcat4&5、Resin3与JBoss3。它同样也有一个独立的版本,可以在应用程序中使用而不必运行在容器中。Primrose通过一个WEB接口来控制SQL处理的追踪、配置,以及动态池管理。在重负荷的情况下可进行连接请求队列处理。

8、SmartPool:是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些临界问题如连接泄漏(connection leaks)、连接阻塞、打开的JDBC对象(如Statements、PreparedStatements)等。SmartPool的特性包括:

  • 支持多个pool
  • 自动关闭相关联的JDBC对象
  • 在所设定time-outs之后察觉连接泄漏
  • 追踪连接使用情况
  • 强制启用最近最少用到的连接
  • 把SmartPool“包装”成现存的一个pool

9、MiniConnectionPoolManager:是一个轻量级JDBC数据库连接池。它只需要Java1.5(或更高)并且没有依赖第三方包。

10、BoneCP:是一个快速、开源的数据库连接池。帮用户管理数据连接,让应用程序能更快速地访问数据库。比C3P0/DBCP连接池速度快25倍。

11、Druid:Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。

支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

Druid针对Oracle和MySql做了特别优化,比如:

  • Oracle的PS Cache内存占用优化
  • MySql的ping检测优化

Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。

简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter,就是通过Druid的SQL Parser分析语义实现的


一.应用程序直接连接数据库

极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机.(每次访问和请求都要去连接一次数据库------>极大的资源的浪费)


v2-6237f421422badc25c1cfc934c6fbb56_b.jpg


二、使用数据库连接池优化程序性能

 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正式针对这个问题提出来的.数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。(资源得到好的利用---->开销也减小了)


v2-98e393b75120a3d07a3cee040d717ffa_b.jpg


数据库连接池的最小连接数和最大连接数的设置要考虑到以下几个因素:

1.最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数库连接资源被浪费.

2.最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作

3.如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接.不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,他将被放到连接池中等待重复使用或是空间超时后被释放.


今天完成:完成对前面的简单总结,还有简单的学习连接池----->今天还有完成老师的任务--->写的很少的

今天的困难:---->慢慢的理解连接池的怎么实现

明天计划:怎么细化连接池的实现方法


加油------>坚持------>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值