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();
    }
}
posted @   LaViez  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示