zoukankan      html  css  js  c++  java
  • Java -- JDBC学习笔记8、连接池

    1、Druid连接池

    在程序初始化时,预先创建指定数量的数据库连接对象存储在池中,当需要连接数据库时,从连接池中取出,现有连接使用完毕后,也不会进行关闭,而是放回池中实现复用,节省资源.

    1.1、Druid连接池使用步骤

    • 在项目的lib文件夹里添加druid.jar文件
    • 创建database.properties文件
    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/StudentManage?characterEncoding=utf-8&useSSL=false
    username=root
    password=root
    #初始化连接数
    initialSize=10
    #最大连接数量
    maxActive=50
    #最小连接数量
    minIdle=5
    #超时等待时间以毫秒为单位
    maxWait=3000
    
    • 连接池工具类
    public class DBUtils
    {
        //声明连接池对象
        private static DruidDataSource ds;
    
        static
        {
            Properties properties = new Properties();
            try
            {
                //加载配置文件
                properties.load(DBUtils.class.getResourceAsStream("/database.properties"));
                //使用DruidDataSourceFactory创建连接池.createDataSource(),参数类型是Properties
                ds = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            catch (Exception exception)
            {
                exception.printStackTrace();
            }
        }
    
        /**
         * 从池中获取连接对象
         * @return 连接对象
         */
        public static Connection getConnection()
        {
            try
            {
                return ds.getConnection();
            }
            catch (SQLException sqlException)
            {
                sqlException.printStackTrace();
            }
            return null;
        }
    }
    
    • 在main方法中测试,每次调用后就放回池中
    for (int i = 0; i < 10; i++)
            {
                Connection conn = DBUtils.getConnection();
                System.out.println(conn);
                //将连接对象放回到池中
                conn.close();
            }
    
    • 结果:
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    com.mysql.jdbc.JDBC4Connection@71c7db30
    

    可以看到、用的都是一个对象,每次用完都放回到池中,下次用就再取,节省资源、实现复用。

    • 注:这里边的conn.close()和Connection中close()不一样,不是释放资源,因为这里获取的conn是从连接池中获取的,在ds.getConnection()中按Ctrl键在getConnection()上边点击鼠标左键查看源码,可以看到一下代码:
    public DruidPooledConnection getConnection() throws SQLException {
            return this.getConnection(this.maxWait);
        }
    
    • 以同样方法再点击DruidPooledConnection可以看到:
    public class DruidPooledConnection extends PoolableWrapper implements PooledConnection, Connection {
        //........
    }
    

    可以看到、DruidPooledConnection实现了Connection接口,而以上循环中使用的conn.close()就是这里边的close(),可以说是被加工了,功能是将连接对象放回到池中,而不是释放掉。

  • 相关阅读:
    [笔记]: 树链剖分 2017-06-05 16:57 35人阅读 评论(0) 收藏
    [笔记]: 最小生成树Kruska 2017-06-05 16:52 34人阅读 评论(0) 收藏
    [笔记]: 并查集 2017-06-05 16:49 58人阅读 评论(0) 收藏
    [bzoj2144]: 跳跳棋 2017-06-02 15:53 42人阅读 评论(0) 收藏
    [noip2013] 货车运输(最大生成树+并查集+LCA) 2017-06-02 15:18 56人阅读 评论(0) 收藏
    [练习] LCA练习1(最基础) 2017-06-02 11:54 39人阅读 评论(0) 收藏
    [笔记]: RMQ算法(区间查询) 2017-06-01 18:06 44人阅读 评论(0) 收藏
    [笔记]: LCA最近公共祖先 2017-06-01 11:38 38人阅读 评论(0) 收藏
    [hdu&poj&洛谷] 经典线段树练习题 2017-06-01 08:10 56人阅读 评论(0) 收藏
    保留X位小数(Double) swift
  • 原文地址:https://www.cnblogs.com/dcy521/p/14732864.html
Copyright © 2011-2022 走看看