首页 > 数据库 >JDBC数据库 连接池配置

JDBC数据库 连接池配置

时间:2024-09-28 23:20:58浏览次数:9  
标签:JDBC 数据库 properties Connection JDBCUtils 连接 连接池

前言

我们在写任何一个CRUD方法的时候都要进行即连接数据库和释放资源这两个操作。DAO层方法中每次都创建一个Connection对象,用完就关闭了,创建Connection成本很大,如何解决这个问题呢?

每次CRUD操作都要使用数据库的时候,都要创建一个数据库对象,普通的JDBC数据库连接使用DriverManager来获取,每次向数据库连接的时候都要将Connection加载到内容中,然后再验证用户名和密码花费时间约1s左右,每次CRUD操作就向数据库要一个连接,执行完成后再断开连接,这样的方式存在几个问题:

  1. 将会消耗大量的资源和时间
  2. 数据库的连接资源并没有得到很好的重复利用
  3. 若同时有个几百人在线呢,性能极差
  4. 频繁的进行数据库连接操作将占用很多的系统资源,严重的甚至会造成服务器崩溃

一、数据库连接池

数据库连接池,就是保存数据库连接对象的容器。可以初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次有对象请求可以直接复用。池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。

二、常见的连接池

C3P0、DBCP和Druid三种开源数据库连接池的特性、配置及优缺点。C3P0以其稳定性著称,DBCP是Tomcat默认的连接池,而Druid则结合多种连接池优点并提供监控功能。通过配置文件管理连接池参数,可以提高系统响应速度和资源利用率,防止内存泄漏,确保数据库连接的高效管理。

三、使用方法

封装JDBCUtils工具类:

 private static DataSource dataSource;

    static {
        Properties properties = new Properties();
        //加载资源文件
        InputStream resourceAsStream = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
        try {
            properties.load(resourceAsStream);
           dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    //获取连接对象
    public static Connection getConnection() throws SQLException {
       return dataSource.getConnection();
    }

    //获取数据源
    public static DataSource getDataSource(){
        return dataSource;
    }

获取连接方式:

public void test() throws Exception {

        Connection connection = JDBCUtils.getConnection();
        String sql = "select * from province";
        PreparedStatement pst = connection.prepareStatement(sql);
        ResultSet rs = pst.executeQuery();
        Province pro;
        List<Province> list = new ArrayList();
        while (rs.next()) {
            pro = new Province();
            pro.setId(rs.getInt(1));
            pro.setName(rs.getString(2));
            list.add(pro);
        }
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(list);
        System.out.println(s);
        JDBCUtils.close(rs,pst,connection);
    }

配置文件:

创建一个名为druid.properties的文件,放在src目录下

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/testdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8
username=root
password=数据库密码
#初始化连接数
initialPoolSize=10
#最小连接数
minIdle=5
#最大连接
maxActive=20
# 超时时间,以毫秒为单位,1000毫秒==1秒
maxWait=3000

四、数据库连接池技术

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”与现在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从“缓冲池”中取出一个,使用完毕之后再放回去。

我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接,可以通过连接池的管理机制监视数据库的连接的数量和使用情况,为系统开发,测试及性能调整提供依据。

另外注意:

DataSource 通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把 DataSource 称为连接池。DataSource用来取代DriverManager来获取Connection,获取速度快,同时可以大幅度提高数据库访问速度。

数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂,因此整个应用只需要一个数据源即可。当数据库访问结束后,程序还是像以前一样关闭数据库连接:JDBCUtils.close(); 但它并没有关闭数据库的物理连接,它仅仅把数据库连接释放,归还给了数据库连接池。

标签:JDBC,数据库,properties,Connection,JDBCUtils,连接,连接池
From: https://blog.csdn.net/Ioc_beans/article/details/142623238

相关文章

  • MySQL数据库基础
    一.知识框架一开始学数据库,我们要先大致了解一下整个体系是怎么样的,搭建起一个知识体系,方便记忆和学习。什么是数据库,由名可知,就是保存用户数据的程序就是数据库,那MySQL又是什么呢,其实MySQL就是一个应用软件,通过这个应用软件就可以创建数据库,能够对数据库进行增删查改等一系......
  • 数据库课程设计案例:在线图书管理系统
    一、项目背景随着信息技术的迅猛发展,传统图书管理模式已逐渐无法满足现代图书馆的需求。在线图书管理系统应运而生,旨在为读者提供更方便快捷的图书查询、借阅和归还服务,同时帮助管理员高效管理书籍信息。二、系统功能需求用户管理用户注册与登录用户信息修改用户角色管理(......
  • 数据库课程设计案例:在线教育管理系统
    一、项目背景随着在线教育的兴起,传统的教学管理模式面临着新的挑战。在线教育管理系统旨在为学生、教师和管理员提供一个高效、便捷的学习与管理平台,以提升学习效果和管理效率。二、系统功能需求用户管理用户注册与登录角色管理(学生、教师、管理员)用户信息修改课程管理......
  • PARTVI-Oracle数据库管理与开发-数据库管理员的概念
    18.数据库管理员的概念18.1.数据库管理员的职责数据库管理员(DBA)的主要责任是使企业数据对其用户可用。DBA必须与开发人员紧密合作,确保他们的应用程序有效地使用数据库,并与系统管理员合作,确保物理资源充足且使用高效。OracleDBA负责了解Oracle数据库架构以及数据库的工作原理......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.4】
    4.新增字段对于已经创建好的数据表,也可以根据业务需求利用ADD新增字段,基本语法格式如下·语法格式1:新增一个字段,并可指定其位置ALTERTABLE数据表名ADD[COLUMN]新字段名字段类型[FIRSTIAFTER字段名]语法格式2:同时新增多个字段ALTERTABLE数据表名ADD[COLUM......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.6】
    3.1.3字符串类型MySQ1.中的字符串类型分为CHAR、VARCHAR、TEXT等多种类型,不同数据类型具有不同的特点,具体如表3-5所示。1.CHAR和VARCHAR类型CHAR和VARCHAR类型都用来保存字符串数据。不同的是,VARCHAR可以存储可变长度的字符串。在MySQ1.中,定义CHAR和VARCH......
  • 数据库技术提升-MySQL数据库原理、设计与应用【1.5】
    第3章数据类型与约束学习目标掌握MySQL中常用数据类型的使用掌握MySQl.中常用的束的使用掌握MySQL中字符集的设置与处理        在数据库中,数据表用来组织和保存各种数据,它是由表结构和数据组成的。在设计表结构时,经常需要根据实际需求,选择合适的数据类型......
  • 数据库 - MySQL的事务
    目录前言一、事务的特性(一)原子性(二)一致性(三)隔离性(四)持久性二、事务的控制语句三、事务隔离级别(一)读未提交(二)读已提交(三)可重复读(四)可序列化四、使用场景五、事务操作(一)开启事务(二)提交事务(三)回滚事务(四)示例六、自动提交模式七、隐式提交八、提交前的保存点......
  • Springboot轮滑竞赛管理系统gsj4e--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,比赛信息,比赛报名,比赛分类,成绩公布,裁判,评审打分,比赛通知,作品提交,奖项信息,比赛奖励开题报告内容一、课题名称轮滑竞赛管理系统开发与应用二、研......
  • Springboot旅游攻略平台2de9n(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,旅游攻略,旅游景点,攻略分类,景点分类,问题分类,旅游问答开题报告内容一、项目背景随着旅游业的蓬勃发展,游客对于旅游信息的获取需求日益多样化、个性化......