`
二大爷
  • 浏览: 1364 次
社区版块
存档分类
最新评论

数据库连接池

阅读更多

转自 http://blog.csdn.net/xinxinqiu/article/details/17531449 public class ConnUtils3

 

public class ConnUtils3 {

private static LinkedList<Connection> pool = new LinkedList<Connection>();  

    static {  

        try {  

            // 声明资源器类 -   

            Properties prop = new Properties();  

            // 获取这个文件的路径  

            URL url = ConnUtils3.class.getClassLoader().getResource(  

                    "jdbc.properties");  

            // ConnUtils3.class.getResource("jdbc.properties")获取的是同目录下  

            String path = url.getPath();// 运行是路径  

            // 为了防止有中文或是空格  

            path = URLDecoder.decode(path, "UTf-8");// 反向将url编码过的路径转换回来  

            File file = new File(path);  

            // 加载jdbc.properties这个文件  

            prop.load(new FileInputStream(file));  

            // 获取信息  

            String driver = prop.getProperty("driver");  

            Class.forName(driver);  

            String jdbcurl = prop.getProperty("url");  

            String nm = prop.getProperty("name");  

            String pwd = prop.getProperty("pwd");  

            // 创建三个原生的连接,都将它们代理  

            String poolSize = prop.getProperty("poolSize");  

            int size = Integer.parseInt(poolSize);  

            for (int i = 0; i < size; i++) {  

                final Connection con = DriverManager.getConnection(jdbcurl, nm,  

                        pwd);  

                // 对con进行动态代理  

                Object proxyedObj = Proxy.newProxyInstance(  

                        ConnUtils3.class.getClassLoader(),  

                        new Class[] { Connection.class },  

                        new InvocationHandler() {  

                            public Object invoke(Object proxy, Method method,  

                                    Object[] args) throws Throwable {  

                                // 是否是close方法  

                                if (method.getName().equals("close")) {  

                                    synchronized (pool) {  

                                        pool.addLast((Connection) proxy);//链接往最后放速度最快  

                                        pool.notify();  

                                    }  

                                    return null;// 如果调用的是close则不会调用被代理类的方法。  

                                }  

                                return method.invoke(con, args);  

                            }  

                        });  

                // 将代理对象放到pool中  

                pool.add((Connection) proxyedObj);  

            }  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

  

    public static Connection getConn() {  

        synchronized (pool) {  

            if (pool.size() == 0) {  

                try {  

                    pool.wait();  

                } catch (InterruptedException e) {  

                    e.printStackTrace();  

                }  

                return getConn();//线程唤醒之后递归继续取链接  

            } else {  

                Connection con = pool.removeFirst();//取出第一个速度快  

                System.err.println("还有几个:" + pool.size());  

                return con;  

            }  

        }  

    }  

 

分享到:
评论

相关推荐

    C#高效数据库连接池源码

    数据库连接池是数据库管理中的重要概念,特别是在高并发和大数据量的应用场景下,它能显著提升性能并降低系统资源消耗。在C#编程环境中,我们可以使用自定义的数据库连接池来实现这一功能。本篇文章将深入探讨“C#...

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库连接池技术。某一应用最大可用数据库连接数的限制,避免某一应用独占所有数据库资源。 在较为完备的数据库连接池实现中,可根据...

    C# 数据库连接池 C# 数据库连接池

    数据库连接池是数据库管理中的一个重要概念,它在C#编程中扮演着优化数据库操作的关键角色。C#数据库连接池是一种管理数据库连接的技术,通过复用已存在的连接而不是每次请求时都创建新的连接,从而提高数据库操作的...

    c# mysql数据库连接池实现

    本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...

    常用jdbc数据库连接jar包,数据库连接池jar包

    本资源集合了常用的JDBC数据库连接jar包,以及一些知名的数据库连接池实现,如dbcp和c3p0,这对于开发人员来说是非常宝贵的资源。 首先,让我们了解一下JDBC。JDBC提供了一套标准的API,包括接口和类,使得开发者...

    03-数据库连接池驱动_数据库连接池;驱动_

    数据库连接池是现代应用程序开发中的重要组成部分,尤其是在处理大量数据交互的应用中,它极大地提高了数据库操作的效率和系统的稳定性。本资源"03-数据库连接池驱动"包含了三种常用的数据库连接池驱动:C3P0、Druid...

Global site tag (gtag.js) - Google Analytics