JDBC9 - Druid连接池
Druid连接池
connection复用,节约了创建和销毁连接的性能消耗,同时提升了响应速度
但连接池有连接数量限制,达到“最大连接数”时,没有连接的用户只能等待
javax.sql.DataSource接口
- 规范连接池获取连接的方法
- 规范连接池回收连接的方法
- DataSource = 第三方连接池的实现
硬编码 - 了解,不推荐 - 不利于后期维护
将1.注册驱动 2.获取连接 交给 DruidDataSource 实现,需要传入驱动名、url、user、password
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///database");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//获取连接
Connection connection = dataSource.getConnection();
//回收连接
connection.close();
软编码 - 推荐
在外部写配置文件,在java代码中,用 Properties 对象读入外部配置文件
根据 Properties 对象创建连接对象,后期修改时只需修改配置文件,无需修改代码
-
配置 .properties 文件,在文件中配置驱动和数据库连接的信息
-
//key = value => java Properties 读取 (key|value) //druid 配置的key 固定命名 driverClassName = com.mysql.cj.jdbc.Driver url = jdbc:mysql:///database username = root password = 123456
-
-
加载配置文件
-
//1.读取外部配置文件 druid.properties Properties properties = new Properties(); //通过io流读取文件配置 //读取src下的文件,可以使用类加载器提供的方法 InputStream ips = DruidUsePart.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(ips); //2.使用连接池的工具类的工程模式,创建连接池 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); //获取连接 Connection connection = dataSource.getConnection(); //数据库crud //回收连接 connection.close(); //关闭io流 ips.close();
-
package com.atguigu.api.druid;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.junit.Test;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
/**
* @author Ashen
* @program atguigu-jdbc
* @description druid连接池使用类
* @data 2023-01-13 14:53
**/
public class DruidUsePart {
/**
* TODO: 硬编码
* 直接使用代码设置连接池参数方式
* 1.创建一个druid连接池对象
* 2.设置连接池参数 【必须 | 非必须】
* 3.获取连接 【通用方法,所有连接池都一样】
* 4.回收连接 【通用方法,所有连接池都一样】
*/
@Test
public void testHard() throws SQLException {
//1.创建连接池对象
DruidDataSource dataSource = new DruidDataSource();
//2.设置参数
//必须 [注册驱动 | url | username | password]
//非必须 初始化连接数量、最大连接数量
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///database");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//非必须 - 了解
dataSource.setInitialSize(5); //初始连接数量
dataSource.setMaxActive(10); //最大连接数量
dataSource.setMaxWait(60000);
dataSource.setTimeBetweenEvictionRunsMillis(60000);
//获取连接
Connection connection = dataSource.getConnection();
//数据库crud
//回收连接
connection.close();
}
/**
* TODO: 软编码
* 通过读取外部文件的方法,实例化druid连接池对象
*/
@Test
public void testSoft() throws Exception {
//1.读取外部配置文件 druid.properties
Properties properties = new Properties();
//通过io流读取文件配置
//读取src下的文件,可以使用类加载器提供的方法
InputStream ips = DruidUsePart.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(ips);
//2.使用连接池的工具类的工程模式,创建连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
//获取连接
Connection connection = dataSource.getConnection();
//数据库crud
//回收连接
connection.close();
//关闭io流
ips.close();
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析