• java数据库连接池


    数据库连接池

    池参数(所有池参数都有默认值):

    初始大小:10个

    最小空闲连接数:3个

    增量:一次创建的最小单位(5个)

    最大空闲连接数:12个

    最大连接数:20个

    最大的等待时间:1000毫秒

    四大连接参数

    连接池也是使用四大连接参数来完成创建连接对象!

    实现的接口

    连接池必须实现:javax.sql.DataSource接口!

    连接池返回的Connection对象,它的close()方法与众不同!调用它的close()不是关闭,而是把连接归还给池!代表该链接不被占用了。

    数据库连接池

    连接池的概念

    用池来管理Connection,这可以重复使用Connection。有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。 

    JDBC数据库连接池接口(DataSource)

      Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商可以让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

    自定义连接池(CloudPool)

    分析:CloudPool需要有一个List,用来保存连接对象。在CloudPool的构造器中创建5个连接对象放到List中!当用人调用了CloudPool的getConnection()时,那么就从List拿出一个返回。当List中没有连接可用时,抛出异常。

      我们需要对Connection的close()方法进行增强,所以我们需要自定义CloudConnection类,对Connection进行装饰!即对close()方法进行增强。因为需要在调用close()方法时把连接“归还”给池,所以CloudPool类需要拥有池对象的引用,并且池类还要提供“归还”的方法。

     CloudPool.java

    public class CloudPool implements DataSource {
    
        private static Properties props = new Properties();
    
        private List<Connection> list = new ArrayList<Connection>();
    
        static {
    
           InputStream in = CloudPool.class.getClassLoader()
    
                  .getResourceAsStream("dbconfig.properties");
    
           try {
    
               props.load(in);
    
               Class.forName(props.getProperty("driverClassName"));
    
           } catch (Exception e) {
    
               throw new RuntimeException(e);
    
           }
    
        }
        public CloudPool () throws SQLException {
    
           for (int i = 0; i < 5; i++) {
    
               Connection con = DriverManager.getConnection(
    
                      props.getProperty("url"), props.getProperty("username"),
    
                      props.getProperty("password"));
    
               CloudPool conWapper = new CloudConnection(con, this);
    
               list.add(conWapper);
    
           }
     }
    
        public void add(Connection con) {
    
           list.add(con);
    
        }
    
        public Connection getConnection() throws SQLException {
    
           if(list.size() > 0) {
    
               return list.remove(0);
    
           }
    
           throw new SQLException("没连接了");
    
        }}
    public class CloudConnection extends ConnectionWrapper {
    
        private ItcastPool pool;
    
       
    
        public CloudConnection(Connection con, CloudPool pool) {
    
           super(con);
    
           this.pool = pool;
    
        }
    
     
    
        @Override
    
        public void close() throws SQLException {
    
           pool.add(this);
    
        }
    
    }
  • 相关阅读:
    《芒果TV》UWP版利用Windows10通用平台特性,率先支持Xbox One平台
    Win10《芒果TV》内测版现已支持在国行版 Xbox One 下载体验
    Win10《芒果TV》商店内测版更新至v3.1.6:率先支持Xbox One平台
    HLS(HTTP Live Streaming)学习和探讨
    喜迎Win10周年版,芒果TV UWP完善手机视频离线下载
    Windows10 1607 x64/x86 + Office 2016 Win/Mac + KMS激活/安装密钥汇总
    Win10商店芒果TV UWP版更新,新增后台视频下载
    Win10 UWP版《芒果TV》v2.4.0直播超女,芒果台综艺一网打尽
    (三)3-3 Python的一般形式和参数
    (三)3-1 练习
  • 原文地址:https://www.cnblogs.com/paoge/p/13639507.html
Copyright © 2020-2023  润新知