Java Web简明教程–Java篇[11]–数据库连接池

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Java Web简明教程–Java篇[11]–数据库连接池

前面(Java篇[9])演示了两个极端的数据库使用方式:


第一种:每次使用数据库,都建立一个新的连接,使用完毕后关闭连接。这种是非常安全的,因为每次使用的都是新连接互不干扯。缺点是非常浪费时间和资源,要知道建立连接是比较浪费时间的。


第二种,就一个数据库连接,该连接保存在一个静态的对象里面,不管多少次请求都用这个连接来实现。优点是速度快,缺点是不可靠,这个缺点对Web网站来说是致命的。据猫哥了解,不同的数据库驱动对数据库连接的处理方式是不确定的,比如MySQL如果只采用一个数据库连接,那么可能会出现:a此连接长时间不用被收回;b多个同时并发的访问使用此连接,因为MySQL连接是串行执行数据库操作的,所以需要长时间排队。


OK,说白了,第一种就是每次都用新筷子,用完就扔了买新的。第二种就是一共就一双筷子,如果人多就排队使用。


那么数据库连接池是一种什么样的思想呢,其实很简单,就是如果我们常用20双筷子(最大并发量20,最多20人同时访问),我们就设置个20容量的池子。来一个访问就分配一个连接,直到20个都分配完了那就报错。


就这么简单,猫哥简单实现如下(就按20个最大连接实现):


import java.sql.*;
import java.util.LinkedList;
public class MysqlPool {
    //这就是我们的池子,想下为啥用static,为啥用LinkedList
    private static LinkedList pool = new LinkedList(); 
    //池水的深度(哈哈,其实就是最大连接数)
    private static int maxCount=20;
    public static void init(){//初始化,就是让20个连接有意义
      try{
      for(int i=0;i
        MysqlHandler handler=new MysqlHandler();
                Connection connection = handler.buildConnection();//建立连接,并放于池中,不用担心这个连接找不到了,因为已经是池中之物了
                pool.add(connection);
            }
         }catch(Exception e){//此处threw exception更好,为何?
          e.printStackTrace();
         }
    }
    public static Connection getConnecton(){//从池中获取一个连接
      if(pool.size()==0)//分配完了
      {
      return null;//没有连接可用
      }
      else{
      return pool.remove(0);//删除第一个对象并返回
      }
    }
    public static void release(Connection connection){//使用完的归还给池子
        pool.add(connection);
    }
}


import java.sql.*;
public class TestMysql {//测试MysqlHandler类
  public static void main(String[] args)  {
  try {//捕获异常
    long start=System.currentTimeMillis();//产生一个当前的毫秒(自1970年1月1日0时起的毫秒数)
    MysqlPool.init();
    for(int i=0;i<1000;i++){
    testOneTime();
    }
    long end=System.currentTimeMillis();
    System.out.println("\n消耗时间:"+(end-start)+"毫秒");
  } catch (SQLException e) {
    e.printStackTrace();
  }
  }
  //测试一次完整查询
  private static void testOneTime()throws SQLException{//可能会有异常,我们在更广阔的天地捕获之
  Connection conn = MysqlPool.getConnecton();
  Statement stmt = conn.createStatement();
  ResultSet rs = null;
  rs=stmt.executeQuery("select * from student_info");
  rs.close();
  stmt.close();
  MysqlPool.release(conn);//注意Statement和ResultSet是需要释放的,而Connection放在池子里面循环使用,不必释放,为啥呢?因为Connection建立连接太耗时!
  }
}

OK,上面猫哥实现了一个相当简单的池子,但是也够用了,主要是体会池子的思想,还是相当贴近现实啊。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
25天前
|
开发框架 前端开发 JavaScript
ASP.NET Web Pages - 教程
ASP.NET Web Pages 是一种用于创建动态网页的开发模式,采用HTML、CSS、JavaScript 和服务器脚本。本教程聚焦于Web Pages,介绍如何使用Razor语法结合服务器端代码与前端技术,以及利用WebMatrix工具进行开发。适合初学者入门ASP.NET。
|
26天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
48 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
SQL 安全 网络安全
Web应用防火墙(WAF)与数据库应用防火墙有什么区别?
Web应用防火墙(WAF)专注于Web应用系统和网站的应用层防护,可有效应对OWASP Top 10等常见攻击,防止SQL注入、CC攻击等。而数据库应用防火墙则位于应用服务器与数据库之间,提供数据库访问控制、攻击阻断、虚拟补丁等高级防护功能,直接保护数据库免受攻击。两者分别针对Web层和数据库层提供不同的安全保护。
44 4
|
1月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
59 6
|
1月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
74 4
|
1月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
1月前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
56 2
|
29天前
|
存储 机器学习/深度学习 监控
南大通用GBase 8s数据库onbar基础使用教程
数据备份与恢复是确保数据安全和业务连续性的关键。onbar作为GBase 8s数据库的备份工具,需配合存储管理器使用,通过配置BAR_BSALIB_PATH等参数,实现数据的备份与恢复。本文详细介绍了onbar的配置、备份、恢复及监控流程,帮助数据库管理员构建高效的数据保护方案。
|
1月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
67 0
WK
|
1月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
109 0