数据库-连接池

什么是连接池?

本质上是一组java架包,介于java应用程序和jdbc数据库物理连接之间,负责帮助应用程序来管理jdbc连接,通过连接池暴露的接口,业务程序可以获取数据库连接,使用完毕以后,可以将连接归还到连接池,供下一个线程使用。
连接池对jdbc连接实行有效的管理:在连接池中jdbc连接不足时,会自动创建连接;在空闲的连接比较多时,也会自动销毁连接;在由多个线程同时获得数据库连接时,连接池提供排队等待功能,保证应用程序有序的获得连接。

如何使用连接池?(DBCP连接池)

创建连接池对象:

public static void dbpoolInit() {
 ds=new BasicDataSource();
 ds.setUrl();
 ds.setDriverClassName();
 ds.setUserName();
 ds.setPassword();}

获取数据库连接+释放数据库连接:

public static void dbpoolTest() {
 Connection conn=null;
 Statement sta=null;
 ResultSet rs=null;
 try {
     conn=ds.getConnection();
     sta=conn.createStatement();
     rs=sta.executeQuery("select * from user");
 }catch(SQLException e) {
     e.printStackTrace();
 }finally {
     try {
         if(conn!=null) conn.close();
         if(sta!=null) sta.close();
         if(rs!=null) rs.close(); 
     }catch(SQLException e) {
        //ignore 
     }
 } }

高级配置:
BasicDataSource:
-.setInitialSize()
-.setMaxTotal()
-.setMaxWaitMills()
-.setMaxIdle()

DBCP定期检查:
BasicDataSource:
.setTestWhileIdle(True)
.setMinEvictableIdleTimeMills()
.setTimeBetweenEvictionRunsMills()

//获取数据库连接
Conn=DriverManager.getConnection

过程:(建立连接时间的花销大)
MySQL客户端->请求建立连接(tcp)->MySQL服务端->发送随机密码种子->MySQL客户端(利用密码种子和保存的数据库密码按照约定的加密算法得到一个加密密码)->发送加密密码-> MySQL服务端(验证,并确认)->连接建立成功-> MySQL客户端

使用连接池的原因:

连接复用:每个线程在使用连接后,不立即销毁,而是将连接交给下一次访问数据库的线程,多个线程共用后端相同的物理连接,实现连接的复用。以连接池的形式来管理数据库连接,每个需要访问数据库的线程,每次从连接池中租界数据库连接,使用完毕后归还到连接池,可以实现连接的重复使用。(创建连接->租借连接)

最大并发连接数限制:数据库服务器端在处理数据库请求时,会在服务器端分配一定的资源(例如,内存:用来保存数据库查询的结果),在请求结束后,这些资源会被释放。而服务器端的资源有限,不可能无限制的分配,当同时有多个数据库请求访问数据库时,服务器端能够处理的连接数是有限制的,当超过最大可分配的资源时,就会出现服务器当机的故障。为了限制并发访问的连接数,数据库服务器端会设置最大并发连接数,如果超过这个数,则会抛出异常。

限流:不能仅依靠最大并发连接数限制,数据库连接必须有序可控的被线程使用,需要在java的应用程序中实现业务线程排队获取数据库连接,限制同时获得数据库连接的线程数,起到限流对后端数据库保护的机制。同时连接数过多会对后端数据库的性能造成严重影响,因为连接数的增多,数据库会存在更多的锁的冲突与检测,加大数据库服务器端的资源的消耗。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最原始的数据库连接就是我们打开一个连接,使用过后再关闭该链接来释放资源。频繁的新建打开再关闭连接对jvm和数据库都...
    野柳阅读 6,605评论 1 11
  • 本文摘自:首先链接一个关于数据库连接池概念的文档 璧说:从数据库连接池说起-博客-云栖社区-阿里云 首先什么是连接...
    那钱有着落吗阅读 1,004评论 0 1
  • 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完...
    奇哥威武阅读 1,185评论 0 8
  • 做过一件最冲动的事情,就是和你在一起; 但是做过最后悔的决定,是和你分开。
    常慧慧慧慧阅读 204评论 0 0
  • 一个从国民公知变成国民岳父的男人,一个自诩为草根逆袭的励志传奇,一个被外界包装成惊天阴谋的励志传奇。我长大后,大多...
    诸君c阅读 1,049评论 0 1

友情链接更多精彩内容