- 浏览: 397537 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (347)
- java基础 (58)
- ajax (10)
- s2sh (10)
- 版本控制 (4)
- 数据库 (34)
- 服务器 (4)
- 开发工具 (8)
- javascript (15)
- soockte (5)
- ext (2)
- 环境搭建 (7)
- struts2 (9)
- 找工作中的面试技巧 (2)
- 承接网站零活 (0)
- JNI+JONSE+OGNL (8)
- 性能优化 (4)
- Android开发 (5)
- xul (8)
- jquery (2)
- 线程 (3)
- jsp+jdbc (7)
- servlet (2)
- java对xml操作 (1)
- IO流的操作 (10)
- 项目开发前配置 (1)
- css (0)
- 上传、下载 (2)
- 知识探讨 (2)
- html (2)
- HQL (0)
- 工作技巧 (1)
- IT (1)
- Hibernate杂谈 (10)
- Spring杂谈 (35)
- DWR (5)
- JUnit测试 (3)
- EasyMock测试web (1)
- ibatis (6)
- maysql (5)
- C++ (0)
- 正则表达式(解剖) (1)
- 密码安全 (2)
- 上传 (1)
- socket (1)
- jni(java与c++结合) (1)
- jdk版本问题 (0)
- tomcat版本问题 (5)
- linux基本命令(初学) (7)
- linux项目发布 (1)
- 3年的经验总结 (1)
- 加解密 (2)
- 高级java阶段 (2)
- java内存分区 (1)
- 浏览器 (1)
- 职业规划 (1)
- 管理 (5)
- java语音 (1)
- SSH (1)
- jsp (3)
- extjs (1)
- uml (2)
- 加密 (1)
- web (2)
- Ant (1)
- 自述 (1)
- Linux (1)
- ssh源码解剖 (1)
- 代码优化 (1)
- 设计模式 (0)
- xml (2)
- JOSN (1)
- scala (0)
- hadoop (0)
- spark (0)
- hana (1)
- shior (1)
- java Word (6)
- java PDF (4)
- java Excel (0)
最新评论
-
高级java工程师:
ztao2333 写道谢谢。收藏下这个总结。呵呵
温习jdk和tomcat -
ztao2333:
大写的,不是大学的
温习jdk和tomcat -
ztao2333:
谢谢。收藏下这个总结。
温习jdk和tomcat -
the_small_base_:
你好,可以提供调用方法吗?需要的Jar,能发下源码吗?谢谢
java实现语音 -
高级java工程师:
文思涌动 写道楼主新年好。可否再传一遍给我,我没有收到, 不清 ...
s2sh整合
最近自己写了一个数据库连接池,本来想用dpcp、c3p0数据库连接池,但是产品用的是oracle的数据仓库,给的驱动是jdbc驱动,但不是数据库连接驱动,不用以上连接池,自己写了一个,请大家看一下有问题没?
public class ConnectionPool implements ConPool{
/**
* 数据库连接池配置参数
*/
private ConConfig conConfig;
/**
* 数据库连接池
*/
private Stack<Connection> poolStack;
/**
* 活动连接数
*/
private int numActive = 0;
/**
* 数据库连接闲置数
*/
private int numIdle = 0;
public ConnectionPool(ConConfig conConfig){
this.conConfig = conConfig;
poolStack = new Stack<Connection>();
addConnection(conConfig.getInitConSize());
}
/**
* 数据库连接池添加连接
* @param count
*/
protected synchronized void addConnection(int count){
for (int i = 0; i < count; i++) {
Connection con;
try {
con = createConnection();
poolStack.push(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 创建连接Connection
* @param conConfig
* @return
* @throws Exception
*/
protected Connection createConnection() throws Exception{
String driver = conConfig.getConDriver();
String url = conConfig.getConUrl();
String userName = conConfig.getUserName();
String passWord = conConfig.getPassWord();
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection(url, userName, passWord);
return conn;
}
/**
* 从数据库连接池中获取连接
*/
public synchronized Connection borrowConnection() throws Exception{
Connection con = null;
while(con == null){
if(!poolStack.isEmpty()){
con = poolStack.pop();
}else{
con = findConnection();
}
}
numActive++;
return con;
}
/**
* 获取可用连接
* @return
* @throws Exception
*/
public synchronized Connection findConnection() throws Exception{
Connection con = null;
if(poolStack.size() < conConfig.getMaxConSize()){
con = createConnection();
}else{
waitTime(conConfig.getMaxWaitTime());
if(poolStack.isEmpty())
throw new IllegalStateException("等待连接超时");
else
con = poolStack.pop();
if(con.isClosed())
throw new IllegalStateException("获取的连接已经关闭");
}
return con;
}
/**
* 关闭连接
*/
public void closeConnection(Connection con) {
try {
if(!con.isClosed()){
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 销毁连接
* @param con
*/
public synchronized void destroyedCon(Connection con){
closeConnection(con);
con = null;
}
/**
* 清空连接池
*/
public synchronized void clear() {
Iterator it = poolStack.iterator();
while(it.hasNext()) {
try {
Connection con =(Connection)it.next();
destroyedCon(con);
} catch(Exception e) {
}
}
poolStack.clear();
}
/**
* 将连接返回到连接池中
*/
public void returnConnection(Connection con) throws Exception{
boolean isClose = con.isClosed();
if(isClose){
destroyedCon(con);
return;
}
if(conConfig.getMaxConSize() <= poolStack.size()){
Connection bicon =poolStack.remove(0);
destroyedCon(bicon);
}else{
poolStack.push(con);
numActive--;
}
}
/**
* 超时等待时间
* @param time
*/
protected void waitTime(long time){
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public ConConfig getConConfig() {
return conConfig;
}
public void setConConfig(ConConfig conConfig) {
this.conConfig = conConfig;
}
public Stack<Connection> getPoolStack() {
return poolStack;
}
public void setPoolStack(Stack<Connection> poolStack) {
this.poolStack = poolStack;
}
public int getNumActive() {
return numActive;
}
public void setNumActive(int numActive) {
this.numActive = numActive;
}
public int getNumIdle() {
return poolStack.size();
}
public void setNumIdle(int numIdle) {
this.numIdle = numIdle;
}
}
public class ConConfig {
public String conDriver;
public String conUrl;
public String userName;
public String passWord;
public int minConSize;
public int maxConSize;
public int acquireIncrement;
public int initConSize;
public int maxWaitTime;
public String getConDriver() {
return conDriver;
}
public void setConDriver(String conDriver) {
this.conDriver = conDriver;
}
public String getConUrl() {
return conUrl;
}
public void setConUrl(String conUrl) {
this.conUrl = conUrl;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public int getMinConSize() {
return minConSize;
}
public void setMinConSize(int minConSize) {
this.minConSize = minConSize;
}
public int getMaxConSize() {
return maxConSize;
}
public void setMaxConSize(int maxConSize) {
this.maxConSize = maxConSize;
}
public int getAcquireIncrement() {
return acquireIncrement;
}
public void setAcquireIncrement(int acquireIncrement) {
this.acquireIncrement = acquireIncrement;
}
public int getInitConSize() {
return initConSize;
}
public void setInitConSize(int initConSize) {
this.initConSize = initConSize;
}
public int getMaxWaitTime() {
return maxWaitTime;
}
public void setMaxWaitTime(int maxWaitTime) {
this.maxWaitTime = maxWaitTime;
}
}
public class ConPoolFactory {
private static ConnectionPool conPool = null;
private static boolean flag = false;
private static ConConfig config = null;
static{
if(!flag){
config = new ConConfig();
config.userName = SSConfig.getInstance().getProperty("biee.conUser"); //用户名
config.passWord = SSConfig.getInstance().getProperty("biee.conPwd"); //密码
config.conDriver= SSConfig.getInstance().getProperty("biee.conDriver");//连接驱动
config.conUrl= SSConfig.getInstance().getProperty("biee.conUrl");//连接URL
config.initConSize = Integer.valueOf(SSConfig.getInstance().getProperty("biee.initialSize")); //初始化连接数
config.acquireIncrement = Integer.valueOf(SSConfig.getInstance().getProperty("biee.acquireIncrement")); //初始化连接递增数
config.maxConSize = Integer.valueOf(SSConfig.getInstance().getProperty("biee.maxConSize")); //最大激活连接数
config.minConSize = Integer.valueOf(SSConfig.getInstance().getProperty("biee.minConSize")); //最小连接数,就这个有用.
config.maxWaitTime= Integer.valueOf(SSConfig.getInstance().getProperty("biee.maxWait"));//获得连接的最大等待毫秒数
conPool = new ConnectionPool(config);
flag = true;
}
}
public ConnectionPool getInstancePool(){
if(conPool == null){
conPool = new ConnectionPool(config);
}
return conPool;
}
}
public class ConnectionPool implements ConPool{
/**
* 数据库连接池配置参数
*/
private ConConfig conConfig;
/**
* 数据库连接池
*/
private Stack<Connection> poolStack;
/**
* 活动连接数
*/
private int numActive = 0;
/**
* 数据库连接闲置数
*/
private int numIdle = 0;
public ConnectionPool(ConConfig conConfig){
this.conConfig = conConfig;
poolStack = new Stack<Connection>();
addConnection(conConfig.getInitConSize());
}
/**
* 数据库连接池添加连接
* @param count
*/
protected synchronized void addConnection(int count){
for (int i = 0; i < count; i++) {
Connection con;
try {
con = createConnection();
poolStack.push(con);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 创建连接Connection
* @param conConfig
* @return
* @throws Exception
*/
protected Connection createConnection() throws Exception{
String driver = conConfig.getConDriver();
String url = conConfig.getConUrl();
String userName = conConfig.getUserName();
String passWord = conConfig.getPassWord();
Class.forName(driver).newInstance();
Connection conn = DriverManager.getConnection(url, userName, passWord);
return conn;
}
/**
* 从数据库连接池中获取连接
*/
public synchronized Connection borrowConnection() throws Exception{
Connection con = null;
while(con == null){
if(!poolStack.isEmpty()){
con = poolStack.pop();
}else{
con = findConnection();
}
}
numActive++;
return con;
}
/**
* 获取可用连接
* @return
* @throws Exception
*/
public synchronized Connection findConnection() throws Exception{
Connection con = null;
if(poolStack.size() < conConfig.getMaxConSize()){
con = createConnection();
}else{
waitTime(conConfig.getMaxWaitTime());
if(poolStack.isEmpty())
throw new IllegalStateException("等待连接超时");
else
con = poolStack.pop();
if(con.isClosed())
throw new IllegalStateException("获取的连接已经关闭");
}
return con;
}
/**
* 关闭连接
*/
public void closeConnection(Connection con) {
try {
if(!con.isClosed()){
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 销毁连接
* @param con
*/
public synchronized void destroyedCon(Connection con){
closeConnection(con);
con = null;
}
/**
* 清空连接池
*/
public synchronized void clear() {
Iterator it = poolStack.iterator();
while(it.hasNext()) {
try {
Connection con =(Connection)it.next();
destroyedCon(con);
} catch(Exception e) {
}
}
poolStack.clear();
}
/**
* 将连接返回到连接池中
*/
public void returnConnection(Connection con) throws Exception{
boolean isClose = con.isClosed();
if(isClose){
destroyedCon(con);
return;
}
if(conConfig.getMaxConSize() <= poolStack.size()){
Connection bicon =poolStack.remove(0);
destroyedCon(bicon);
}else{
poolStack.push(con);
numActive--;
}
}
/**
* 超时等待时间
* @param time
*/
protected void waitTime(long time){
try {
Thread.sleep(time);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public ConConfig getConConfig() {
return conConfig;
}
public void setConConfig(ConConfig conConfig) {
this.conConfig = conConfig;
}
public Stack<Connection> getPoolStack() {
return poolStack;
}
public void setPoolStack(Stack<Connection> poolStack) {
this.poolStack = poolStack;
}
public int getNumActive() {
return numActive;
}
public void setNumActive(int numActive) {
this.numActive = numActive;
}
public int getNumIdle() {
return poolStack.size();
}
public void setNumIdle(int numIdle) {
this.numIdle = numIdle;
}
}
public class ConConfig {
public String conDriver;
public String conUrl;
public String userName;
public String passWord;
public int minConSize;
public int maxConSize;
public int acquireIncrement;
public int initConSize;
public int maxWaitTime;
public String getConDriver() {
return conDriver;
}
public void setConDriver(String conDriver) {
this.conDriver = conDriver;
}
public String getConUrl() {
return conUrl;
}
public void setConUrl(String conUrl) {
this.conUrl = conUrl;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public int getMinConSize() {
return minConSize;
}
public void setMinConSize(int minConSize) {
this.minConSize = minConSize;
}
public int getMaxConSize() {
return maxConSize;
}
public void setMaxConSize(int maxConSize) {
this.maxConSize = maxConSize;
}
public int getAcquireIncrement() {
return acquireIncrement;
}
public void setAcquireIncrement(int acquireIncrement) {
this.acquireIncrement = acquireIncrement;
}
public int getInitConSize() {
return initConSize;
}
public void setInitConSize(int initConSize) {
this.initConSize = initConSize;
}
public int getMaxWaitTime() {
return maxWaitTime;
}
public void setMaxWaitTime(int maxWaitTime) {
this.maxWaitTime = maxWaitTime;
}
}
public class ConPoolFactory {
private static ConnectionPool conPool = null;
private static boolean flag = false;
private static ConConfig config = null;
static{
if(!flag){
config = new ConConfig();
config.userName = SSConfig.getInstance().getProperty("biee.conUser"); //用户名
config.passWord = SSConfig.getInstance().getProperty("biee.conPwd"); //密码
config.conDriver= SSConfig.getInstance().getProperty("biee.conDriver");//连接驱动
config.conUrl= SSConfig.getInstance().getProperty("biee.conUrl");//连接URL
config.initConSize = Integer.valueOf(SSConfig.getInstance().getProperty("biee.initialSize")); //初始化连接数
config.acquireIncrement = Integer.valueOf(SSConfig.getInstance().getProperty("biee.acquireIncrement")); //初始化连接递增数
config.maxConSize = Integer.valueOf(SSConfig.getInstance().getProperty("biee.maxConSize")); //最大激活连接数
config.minConSize = Integer.valueOf(SSConfig.getInstance().getProperty("biee.minConSize")); //最小连接数,就这个有用.
config.maxWaitTime= Integer.valueOf(SSConfig.getInstance().getProperty("biee.maxWait"));//获得连接的最大等待毫秒数
conPool = new ConnectionPool(config);
flag = true;
}
}
public ConnectionPool getInstancePool(){
if(conPool == null){
conPool = new ConnectionPool(config);
}
return conPool;
}
}
发表评论
-
SQL总结存储过程
2017-02-16 10:13 367概念 存储过程(Stored Procedure):已预编译 ... -
oracle设置定时任务job调度执行存储过程或pl/sql代码块
2017-02-16 09:53 407目前oracle数据库设置定时任务job调度一般有两种方式,分 ... -
sql大全
2013-07-12 19:02 1007经典SQL语句大全 一、基础 1、说明: ... -
Linux安装mysql——源码安装
2013-06-05 09:17 7571.假设已经有mysql-5.5.10.tar.gz以及cma ... -
hql语句集合
2013-04-21 19:13 1045/** * */ package com.b510 ... -
oracle命令导入dmp文件与给用户受权
2012-05-03 15:57 993创建账号:CREATE USER vdrs IDENTIFIE ... -
oracle对日期进行操作
2012-03-19 15:41 1224一下心血来潮,把部分Oracle对时间的一些处理,整理了一下, ... -
如何查出同一张表中字段值重复的记录
2012-03-17 09:45 1549比如现在有一人员表(表名:peosons) 若想将姓名、身份证 ... -
数据库驱动大全
2011-12-26 09:47 892经常因为链接字符串记不住或者记错的原因浪费时间,终于有时间把常 ... -
用JSP导出ORACLE的数据表DDL
2011-12-08 10:47 1059EXPDDL.JSP <%@ page cont ... -
jsp脚本实现本分数据库
2011-12-08 10:44 861JSP导出Oracle数据表是一个在开发应用时的常用的操作,那 ... -
oracle创建id自增及相关增删改查操作
2011-11-21 16:46 960新建下载权限记录表 DOWNLOADPOPE_TAB ... -
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connec
2011-10-28 15:43 1257WARN: SettingsFactory,103 - Cou ... -
oracle安装及使用
2011-10-16 23:50 887安装后数据库 1.使用plsql打开,一般选项 口 ... -
递归数
2011-10-10 17:30 1064有的情况下,我们需要用递归的方法整理数据,这才程序中很容易 ... -
mysql中递归树状结构
2011-10-10 17:20 11317在Oracle 中我们知道有一个 Hierarchic ... -
级联删除和级联修改
2011-06-22 14:08 2785曾经因为级联删除的问题浪费了N多时间,顾此在这里写下小小心得, ... -
mysql解决乱码问题?
2011-06-15 14:33 793mysql数据库,乱码解决 ... -
MySql
2011-06-14 16:12 8031.安装之后 2.创建数据库 s2sh(库名) creat ... -
数据库死锁的解释?以及什么是死锁
2011-04-25 10:41 830什么是数据库死锁 每个使用关系型数据库的程序都可能 ...
相关推荐
Java自定义连接池类,可以用,有详尽介绍,本人进行过测试
简单的利用java装饰模式自定义实现了连接池简单实例。
自己写的连接池如果想知道连接池是怎么实现的就动手下载吧!
Java自定义连接池,单例模式,通用的BaseDao,可快速访问数据库
1.主要理解动态代理的设计思想 2.理解连接池的设计思想以及优点
适合jsp的一个自定义连接池,用连接池提高存取效率
NULL 博文链接:https://364232252.iteye.com/blog/2368454
主要介绍了JDBC自定义连接池过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://coolxing.iteye.com/blog/1258983
手动设计自定义数据库连接池,连接池自己总结下来就是用来管理操作数据库管道(数据库管道拥有数据库的引用,可以指向mysql,也可以执行其他db)的集合。 使用连接池,允许其他线程使用闲置连接来执行有用的任务。...
这是一个可以自定义参数的使用Ssh2连接远程服务器的连接池,比如目标服务器地址、名称和密码;自定义连接池参;还提供了两个工具类,来向目标服务器的指定路径下上传文件或下载文件
自定义连接池大小及最大处理channel数 消费者底层断线自动重连 底层使用轮循方式复用tcp 生产者每个tcp对应一个channel,防止channel写入阻塞造成内存使用过量 支持rabbitmq exchangeType 默认交换机、队列、消息都会...
JDBC连接池&DBUtils。...【自定义连接池】(了解) * SUN公司提供了一个连接池的接口.(javax.sql.DataSource). * 定义一个连接池:实现这个接口. * 使用List集合存放多个连接的对象. QueryRunner之查询
迷你泳池 Minio连接池
下面小编就为大家带来一篇详谈Jedis连接池的使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
使用过Elasticsearch RestFul API的都知道,在Java端使用是ES服务需要创建Java Client,但是每一次连接都实例化一个client,对系统的消耗很大,而且最令人头疼的是它的连接非常慢。所以为了解决上述问题并提高client...
自定义的JDBC连接池,支持并发访问,可维持多个数据库的连接池
第一章 自定义连接池使用JDBC操作数据库,需要建立Connection,使用传统的JDBC操作需要每次创建Connection,创建Connection是一个
自定义连接池大小及最大处理channel数。消费者底层断线自动重连。生产者底层断线自动重连 v1.0.12。底层使用轮循方式复用tcp。生产者每个tcp对应一个channel,防止channel写入阻塞造成内存使用过量。支持rabbitmq ...