- 浏览: 691299 次
- 来自: ...
文章分类
最新评论
-
ranguisheng:
可以加点注释,代码不便于阅读.
用java实现数据库连接池的一个简单示例 -
abcd880129:
这样写的话,还要用专门的下载工具,不然,只能下到一个为空的ex ...
ZK下载文件时,不在服务器生成文件直接下载 -
234369425:
同上,是20
java计算阶乘 -
CodeToMyLaw:
如果目录中含有中文呢?
[^\x00-\xff] 中文的 ...
js验证文件目录格式的正确性 -
yanzhoupuzhang:
加了,还是报那个错误!
org.apache.commons.dbcp.BasicDataSource的解决方法
转载:http://hi.baidu.com/triceratops/blog
import java.util.Stack; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.apache.log4j.*; public final class DBConnectionPool { private static DBConnectionPool dbConnectionPool = null; private static int accumulator = 0; private static Logger log = Logger.getLogger(DBConnectionPool.class); private static final int POOL_INIT_SIZE = 128; private static final int POOL_MAX_SIZE = 512; private Stack pool; private String driverName = "com.ibm.db2.jcc.DB2Driver"; private String url = "jdbc:db2://192.168.1.100:60000/flamingo"; private String user = "daniel"; private String password = "850306"; public static DBConnectionPool getInstance() throws Exception{ if(dbConnectionPool == null){ synchronized(DBConnectionPool.class){ if(dbConnectionPool == null) dbConnectionPool = new DBConnectionPool(); } } return dbConnectionPool; } private DBConnectionPool() throws ClassNotFoundException, SQLException{ log.setLevel(Level.DEBUG); pool = new Stack(); initializePool(); } private void initializePool() throws ClassNotFoundException, SQLException{ log.info("Database connection pool initializing..."); Connection conn = null; try{ Class.forName(driverName); for(int i = 0;i < POOL_INIT_SIZE;i++){ conn = new DBConnection(DriverManager.getConnection (url,user,password),this).getConnection(); pool.push(conn); accumulator++; } } catch(ClassNotFoundException e){ log.error("Failure: Cannot find the db2 driver!"); throw e; } catch(SQLException e){ log.error("Failure: Cannot connect to the database!"); throw e; } log.info("Database connection pool initialized successfully!"); log.info("pool size is: "+pool.size()); } public synchronized Connection getConnection() throws ClassNotFoundException, SQLException{ Connection conn; while(true){ if(!pool.isEmpty()){ conn = (Connection)pool.pop(); if(conn == null || conn.isClosed()){ accumulator--; continue; } return conn; } else{ if(accumulator == POOL_MAX_SIZE){ try{ wait(5000); } catch(InterruptedException e){ e.printStackTrace(); } } else{ //create a new database connection try{ Class.forName(driverName); conn = new DBConnection(DriverManager.getConnection (url,"db2inst2","db2inst2"),this).getConnection(); accumulator++; return conn; } catch(ClassNotFoundException e){ log.error("Failure: Cannot find the db2 driver!"); throw e; } catch(SQLException e){ log.error("Failure: Cannot connect to the database!"); throw e; } } } } } public synchronized boolean returnConnection(Connection conn){ if(pool.size() < POOL_MAX_SIZE){ pool.push(conn); log.info(conn +" has been returned!"); notify(); return true; } return false; // The connection pool is full filled. } public static void main(String[] args) throws Exception{ Connection conn = getInstance().getConnection(); System.out.println(conn); conn.close(); } } =============================================================================== import java.sql.Connection; import java.sql.SQLException; import java.lang.reflect.Proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.apache.log4j.Logger; import org.apache.log4j.Level; public class DBConnection implements InvocationHandler{ private Connection conn; private DBConnectionPool dbConnectionPool; private static Logger log = Logger.getLogger(DBConnectionPool.class); DBConnection(Connection conn,DBConnectionPool dbConnectionPool){ this.conn = conn; this.dbConnectionPool = dbConnectionPool; log.setLevel(Level.DEBUG); } //return the proxy of an inner hold connection Connection getConnection(){ return (Connection)Proxy.newProxyInstance( conn.getClass().getClassLoader(),new Class[]{Connection.class},this); } public Object invoke(Object proxy,Method method, Object[] args) throws SQLException, IllegalAccessException,InvocationTargetException{ Object result = null; try{ log.debug("Method: "+method.getName()+" starts......"); if(method.getName().equals("close")){ close(); } else{ result = method.invoke(conn,args); } log.debug("Method: "+method.getName()+" ends......"); } catch(SQLException e){ log.error("Database operation failed, please try later..."); throw e; } catch(IllegalAccessException e){ log.error(method.getName()+" operation forbidden!"); throw e; } catch(InvocationTargetException e){ log.error(method.getName()+" operation forbidden!"); throw e; } return result; } private void close() throws SQLException{ if(!dbConnectionPool.returnConnection(getConnection())){ conn.close(); log.info(conn + " is closed!"); conn = null; } } }
发表评论
-
Json,Gson,FastJson解析笔记
2015-06-13 17:31 835Json 1.将JavaBean转换成Json对象: pu ... -
String与InputStream互转的几种方法
2015-06-13 17:24 631/** * 利用BufferedReader ... -
Java压缩图片
2015-06-06 15:49 1079package com.yipai.ut ... -
HashMap的工作原理
2013-11-18 22:58 803本文由 ImportNew - 唐小娟 翻译自 Javarev ... -
一道多线程题目的解决方案
2013-08-03 17:24 756在iteye上看到的一道多线程的题目,参考了一下网友的实现,那 ... -
java socket 多线程网络传输多个文件
2013-06-25 14:57 838由于需要研究了下用 java socket 传输文件,由于需要 ... -
处理大数字
2011-04-30 13:40 977/** * 处理大数字 * & ... -
生成随机数
2011-04-30 13:39 1194/** * 生成随机数 */ public cl ... -
转换数字的进制
2011-04-30 13:38 1281/** * * 转换数字的进制 */ pu ... -
数字的舍入
2011-04-30 13:37 1076/** * 数字的舍入 * */ publi ... -
格式化数字
2011-04-30 13:36 1138/** * 格式化数字的输出 * */ pu ... -
数字与其封装类之间的转换
2011-04-30 13:16 811/** * * 数字与其封装类之间的转换 * ... -
Adapter适配器模式
2011-04-24 21:38 830/** * Adapter适配器模式<br> ... -
Factory工厂模式
2011-04-24 21:36 859/** * 模式名称:工厂模式 * 模式特征:通过 ... -
Singleton单例模式
2011-04-24 21:35 959public class SingletonA { ... -
排序类
2011-04-24 20:38 976/** * 定义数字排序的 ... -
方法和变量在继承时的覆盖与隐藏
2011-04-24 20:30 943public class Parent2 { // ... -
类的加载顺序
2011-04-24 20:27 825/** * 父类 * */ public ... -
自定义形状类(继承的运用)
2011-04-10 17:18 1073/** * * 自定义图形的基类 */ p ... -
myeclipse8.6 注册码
2011-04-10 14:17 1106package com.springemail; i ...
相关推荐
用java编写的数据库连接池源码及调用示例源码,jdbcPool是连接池源码,jdbcPoolTest是调用示例源码。
Java数据库连接池的使用示例,与大家共享下
用java写的数据库连接池及使用示例,已封装成jar包,可以直接调用,也可以反编译查看源代码。readme.txt文件有说明。
主要介绍了java数据库连接池和数据库连接示例,需要的朋友可以参考下
JSP数据库连接池的研究与实现(源代码+论文).rar是一个针对Java Server Pages (JSP) 技术开发者的宝贵资源包,它旨在通过提供一套完整的解决方案来优化Web应用程序中的数据库连接管理。在动态网站和应用程序中,...
java配置dbcp连接池示例分享,大家参考使用吧
里面有很多我做项目时候总结的ppt文档和示例。 包括很多一些Java机制用法和一下常用技术 希望大家喜欢
不用配置的数据库连接池,直接使用。包含jar和使用示例。
单例模式的多数据库连接池完整版 可同时支持目前市面上各种流行的数据库连接 包中自带doc描述,和MSSQL2005的连接示例。 下载后即可用!
本文将详细介绍Spring Boot中如何使用HikariCP作为数据库连接池,包括其工作原理、优势分析、配置步骤以及代码示例。通过本文,读者将能够轻松集成HikariCP到Spring Boot项目中,从而提高数据库连接的性能和效率。 ...
主要为大家介绍了java使用influxDB数据库的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
C3P0链接mysql数据库示例代码,直接运行SystemProp的main函数即可看到结果。
最新 c3p0 java 数据库 连接池
12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建Login页面 12.3.3 创建servlet 12.3.4 部署 12.4 使用JSP 12.4.1 在JSP中使用JavaBean 12.4.2 自动类型...
主要介绍了Java数据库连接池c3p0过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
db-dhcp: 基于数据库连接池实现 db-mybatis: 基于Mybatis框架实现 db-hibernate: 基于Hibernate框架实现 db-druid: 基于阿里巴巴数据库连接池实现 db-shell: 基于脚本实现 备注: 示例持续更新中。 开发人员 WeChat: ...
主要介绍了浅谈常用Java数据库连接池(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K(运行时需要slf4j和guava的支持,这二者加...
java中的装饰模式及动态代理模式示例源码,并且手写数据库连接池,以及展示动态代理模式在连接池中的使用
12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建Login页面 12.3.3 创建servlet 12.3.4 部署 12.4 使用JSP 12.4.1 在JSP中使用JavaBean 12.4.2 自动类型...