文辉居士

db.properties配置连接,出现异常的最大连接数限制

db.properties配置连接,出现错误的最大连接数限制
这是   db.properties配置信息 
drivers=oracle.jdbc.driver.OracleDriver   
logfile=d:\\workspace\\log.txt   
oracle.url=jdbc:oracle:thin:@192.168.18.11:1521:prod   
oracle.maxconn=100   
oracle.user=apps 
oracle.password=apps 


日志: 
Mon   Jun   18   09:55:53   CST   2007:   成功注册JDBC驱动程序oracle.jdbc.driver.OracleDriver 
Mon   Jun   18   09:55:53   CST   2007:   错误的最大连接数限制:   100     .连接池:   oracle 
Mon   Jun   18   09:55:53   CST   2007:   成功创建连接池oracle 
Mon   Jun   18   09:55:55   CST   2007:   连接池oracle创建一个新的连接 

import   java.io.*; 
import   java.sql.*; 
import   java.util.*; 
import   java.util.Date; 
/** 
*   管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接 
*   池的访问.客户程序可以调用getInstance()方法访问本类的唯一实例. 
*/ 
public   class   DBConnectionManager   { 
static   private   DBConnectionManager   instance;   //   唯一实例 
static   private   int   clients; 

private   Vector   drivers   =   new   Vector(); 
private   PrintWriter   log; 
private   Hashtable   pools   =   new   Hashtable(); 

/** 
*   返回唯一实例.如果是第一次调用此方法,则创建实例 

*   @return   DBConnectionManager   唯一实例 
*/ 
static   synchronized   public   DBConnectionManager   getInstance()   { 
if   (instance   ==   null)   { 
instance   =   new   DBConnectionManager(); 

clients++; 
return   instance; 


/** 
*   建构函数私有以防止其它对象创建本类实例 
*/ 
private   DBConnectionManager()   { 
init(); 

/** 
*   将连接对象返回给由名字指定的连接池 

*   @param   name   在属性文件中定义的连接池名字 
*   @param   con   连接对象 
*/ 
public   void   freeConnection(String   name,   Connection   con)   { 
DBConnectionPool   pool   =   (DBConnectionPool)   pools.get(name); 
if   (pool   !=   null)   { 
pool.freeConnection(con); 



/** 
*   获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数 
*   限制,则创建并返回新连接 

*   @param   name   在属性文件中定义的连接池名字 
*   @return   Connection   可用连接或null 
*/ 
public   Connection   getConnection(String   name)   { 
DBConnectionPool   pool   =   (DBConnectionPool)   pools.get(name); 
if   (pool   !=   null)   { 
return   pool.getConnection(); 

return   null; 


/** 
*   获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制, 
*   则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接. 

*   @param   name   连接池名字 
*   @param   time   以毫秒计的等待时间 
*   @return   Connection   可用连接或null 
*/ 
public   Connection   getConnection(String   name,   long   time)   { 
DBConnectionPool   pool   =   (DBConnectionPool)   pools.get(name); 
if   (pool   !=   null)   { 
return   pool.getConnection(time); 

return   null; 


public   int   getClient(){ 
return   clients; 

/** 
*   关闭所有连接,撤销驱动程序的注册 
*/ 
public   synchronized   void   release()   { 
//   等待直到最后一个客户程序调用 
if   (--clients   !=   0)   { 
return; 
}

Enumeration   allPools   =   pools.elements(); 
while   (allPools.hasMoreElements())   { 
DBConnectionPool   pool   =   (DBConnectionPool)   allPools.nextElement(); 
pool.release(); 

Enumeration   allDrivers   =   drivers.elements(); 
while   (allDrivers.hasMoreElements())   { 
Driver   driver   =   (Driver)   allDrivers.nextElement(); 
try   { 
DriverManager.deregisterDriver(driver); 
log( "撤销JDBC驱动程序   "   +   driver.getClass().getName()+ "的注册 "); 

catch   (SQLException   e)   { 
log(e,   "无法撤销下列JDBC驱动程序的注册:   "   +   driver.getClass().getName()); 




/** 
*   根据指定属性创建连接池实例. 

*   @param   props   连接池属性 
*/ 
private   void   createPools(Properties   props)   { 
Enumeration   propNames   =   props.propertyNames(); 
while   (propNames.hasMoreElements())   { 
String   name   =   (String)   propNames.nextElement(); 
if   (name.endsWith( ".url "))   { 
String   poolName   =   name.substring(0,   name.lastIndexOf( ". ")); 
String   url   =   props.getProperty(poolName   +   ".url "); 
if   (url   ==   null)   { 
log( "没有为连接池 "   +   poolName   +   "指定URL "); 
continue; 

String   user   =   props.getProperty(poolName   +   ".user "); 
String   password   =   props.getProperty(poolName   +   ".password "); 
String   maxconn   =   props.getProperty(poolName   +   ".maxconn ",   "0 "); 

int   max; 
try   { 
max   =   Integer.valueOf(maxconn).intValue(); 

catch   (NumberFormatException   e)   { 
log( "错误的最大连接数限制:   "   +   maxconn   +   "   .连接池:   "   +   poolName); 
max   =   0; 

DBConnectionPool   pool   = 
new   DBConnectionPool(poolName,   url,   user,   password,   max); 
pools.put(poolName,   pool); 
log( "成功创建连接池 "   +   poolName); 



/** 
*   读取属性完成初始化 
*/ 


------解决方案--------------------------------------------------------
你的配置文件里的100后面有一个空格,Integer.valueOf(maxconn)时抛出了NumberFormatException. 
------解决方案--------------------------------------------------------
调整oracle中的session的参数,来调整数据库的最大连接数就 了

posted on 2012-12-25 17:48  restService  阅读(687)  评论(0编辑  收藏  举报

导航


我是有底线的赠送场