首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

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

2012-01-05 
db.properties配置连接,出现错误的最大连接数限制这是db.properties配置信息driversoracle.jdbc.driver.O

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的参数,来调整数据库的最大连接数就 了

热点排行