Java课题笔记~数据库连接池

news/2025/2/12 8:30:17/

一、数据库连接池

1.1 数据库连接池简介

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)

  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;

  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

  • 好处

    • 资源重用

    • 提升系统响应速度

    • 避免数据库连接遗漏

之前我们代码中使用连接是每次使用都创建一个Connection对象,使用完毕就会将其销毁。这样重复创建销毁的过程是特别耗费计算机的性能的及消耗时间的。

而数据库使用了数据库连接池后,就能达到Connection对象的复用,如下图

 

连接池是在一开始就创建好了一些连接(Connection)对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还给连接池;这样就可以起到资源重用,也节省了频繁创建连接销毁连接所花费的时间,从而提升了系统响应的速度。

1.2 数据库连接池实现

  • 标准接口:==DataSource==

    官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。该接口提供了获取连接的功能:

    Connection getConnection()

    那么以后就不需要通过 DriverManager 对象获取 Connection 对象,而是通过连接池(DataSource)获取 Connection 对象。

  • 常见的数据库连接池

    • DBCP

    • C3P0

    • Druid

    我们现在使用更多的是Druid,它的性能比其他两个会好一些。

  • Druid(德鲁伊)

    • Druid连接池是阿里巴巴开源的数据库连接池项目

    • 功能强大,性能优秀,是Java语言最好的数据库连接池之一

1.3 Driud使用

方式一:

  1. 导入jar包(mysql-connection-java.jar,druid.jar),同时加入到类加载路径中

  2. 直接创建连接池对象:new对象 DruidDataSource

  3. 然后设置属性。

    1. setDriverClassName()

    2. setUrl()

    3. setUsername()

    4. setPassword()

    5. setInitialSize()

    6. setMaxSize()

    7. setMaxWait()

  4. 通过连接池对象,获取数据库连接

方式二:

  • 导入jar包 mysql-connection-java.jar、druid-1.1.12.jar

  • 定义配置文件

  • 加载配置文件

  • 获取数据库连接池对象

  • 获取连接

现在通过代码实现,首先需要先将druid的jar包放到项目下的lib下并添加为库文件

 

项目结构如下:

 

编写配置文件如下:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///ssm?useSSL=false&useServerPrepStmts=true
username=root
password=root
# 初始化连接数量
initialSize=5
# 最大连接数
maxActive=10
# 最大等待时间
maxWait=3000

使用druid的代码如下:

/*** Druid数据库连接池演示*/
public class DruidDemo {
​public static void main(String[] args) throws Exception {//1.导入jar包//2.定义配置文件//3. 加载配置文件Properties prop = new Properties();prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));//获取工作目录//System.out.println(System.getProperty("user.dir"));//采用类加载方式获取文件的内容,并封装成流//InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");//4. 获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
​//5. 获取数据库连接 ConnectionConnection connection = dataSource.getConnection();System.out.println(connection); //获取到了连接后就可以继续做其他操作了
​//System.out.println(System.getProperty("user.dir"));}
}

注意:

System.getProperty("user.dir"),在web项目,返回值就不是项目的根目录了,而是tomcat的bin目录。


http://www.ppmy.cn/news/993460.html

相关文章

远距离传输大型文件:如何应对不同地区的网络环境和带宽约束

在现代社会中,远程传输大文件已经变得非常常见了。无论是个人生活还是各种组织之间的合作和协作,都需要频繁地进行文件传输。但是,由于不同地区的网络状况和带宽限制,传输大文件可能会遇到很多问题。因此,如何应对不同…

vue使用driver.js完成页面引导的功能

需求:给客户做一个页面引导,教客户怎么做 效果: driverjs官方文档 一.安装driver.js # Using npm npm install driver.js# Using pnpm pnpm install driver.js# Using yarn yarn add driver.js 二.在自己需要引导的页面上引入driver.js i…

redis 淘汰策略和持久化

文章目录 一、淘汰策略1.1 背景1.2 淘汰策略 二、持久化2.1 AOF日志2.1.1 AOF配置2.1.2 AOF策略2.1.3 AOF缺点2.1.4 AOF Rewrite2.1.5 AOF Rewrite配置2.1.6 AOF Rewrite缺点2.1.7 fork进程时的写时复制2.1.8 大key对持久化的影响 2.2 RDB快照2.2.1 RDB配置2.2.2 RDB缺点 2.3 混…

搞活系列-Java NIO之偏偏不用buffer.flip()会出现什么问题?

最近看博客又看到了Java NIO相关的博客,其中有讲解NIO和传统IO关于文件复制的文章,看到了如下的代码: /**** channel用例* 基于channel的文件复制*/Testpublic void fileCopyByChannel(){try {FileInputStream fileInputStream new FileInpu…

Linux-MySQL安装

配置: 1.VMware workstation pro 2.MySQL 3.centOS 5.7版本 1.配置yum仓库 #更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022#安装 rpm --Uvh https://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm 2.安装mysql yum …

day02_springboot综合案例

day02_springboot综合案例 订单操作 查询所有订单 查询所有订单流程 查询订单,要把订单对应的产品也要查出来 Orders实体类 Data public class Orders {private String id;private String orderNum;DateTimeFormat(pattern"yyyy-MM-dd HH:mm")privat…

IRQ和FIQ有什么区别,在CPU里面是怎么做的

IRQ(Interrupt Request)和 FIQ(Fast Interrupt Request)是 ARM 架构中用于处理中断的两种不同类型。 区别如下: 优先级:FIQ 具有更高的优先级,即当 FIQ 发生时,CPU 会在当前指令执行…

【Linux】关于Bad magic number in super-block 当尝试打开/dev/sda1 时找不到有效的文件系统超级块

每个区段与 superblock 的信息都可以使用 dumpe2fs 这个指令来查询的! 不过可惜的是,我们的 CentOS 7 现在是以 xfs 为默认文件系统, 所以目前你的系统应该无法使用 dumpe2fs 去查询任何文件系统的。 因为目前两个版本系统的根目录使用的文…