Java Proxool最大连接数
我正在使用java连接池(版本0.9.1)。一切正常,直到我达到最大连接数。如果达到最大连接计数,proxool会立即抛出一个Java Proxool最大连接数,java,connection-pooling,proxool,Java,Connection Pooling,Proxool,我正在使用java连接池(版本0.9.1)。一切正常,直到我达到最大连接数。如果达到最大连接计数,proxool会立即抛出一个SQLEXEPION: java.sql.SQLException: Couldn't get connection because we are at maximum connection count (n/n) and there are none available 当然,将显示最大连接计数,而不是n 为什么proxool会立即抛出SQLException,而不
SQLEXEPION
:
java.sql.SQLException: Couldn't get connection because we are at maximum
connection count (n/n) and there are none available
当然,将显示最大连接计数,而不是n
为什么proxool会立即抛出SQLException
,而不是等待可用的连接?当然不是永远,但是一个可配置的超时会很好
我不知道这是否重要,但我正在TomcatJ2EE应用程序中使用proxool。proxool的参数在
context.xml中定义,我正在使用。我快速查看了源代码,这看起来像ConnectionPool.getConnection的标准行为。这句话也是这么说的
还有其他数据库池库(如ApacheDBCP和C3P0),但您必须进行一些重构才能使用它们。另一种方法是自己包装getConnection方法(或修改proxool源代码),并使其按您想要的方式工作。我快速查看了源代码,这看起来像ConnectionPool.getConnection的标准行为。这句话也是这么说的
还有其他数据库池库(如ApacheDBCP和C3P0),但您必须进行一些重构才能使用它们。另一种方法是自己包装getConnection方法(或修改proxool源代码),并使其按您想要的方式工作。我在proxool邮件列表上问了这个问题,但很快得到了一个否定的答案
现在不支持可配置(或任何类型的)超时,但是有计划实现此功能。我在proxool邮件列表上问了这个问题,我得到了一个快速但不幸的否定回答
现在不支持可配置(或任何类型的)超时,但是计划实现此功能。您可以使用Thread.sleep()来处理它。
当达到最大连接数时,Proxool引发异常。一旦检测到它,您可以通过调用“Thread.sleep()”等待一段时间,希望在这段时间之后,连接将再次可用
public Connection getConnection() throws SQLException {
Connection conn = null;
while (conn ==null){
try {
conn = DriverManager.getConnection("proxool."+connectionPoolAlias);
} catch (SQLException e) {
e.printStackTrace();
String methodName =e.getStackTrace()[0].getMethodName();
if (methodName.equalsIgnoreCase("checkSimultaneousBuildThrottle") ||
methodName.equalsIgnoreCase("quickRefuse")){
try{
Thread.sleep(500);
}catch( InterruptedException ie){}
}else{
throw e;
}
}
}
return conn;
}
公共连接getConnection()引发SQLException{
连接conn=null;
while(conn==null){
试一试{
conn=DriverManager.getConnection(“proxool.”+connectionPoolAlias);
}捕获(SQLE异常){
e、 printStackTrace();
String methodName=e.getStackTrace()[0].getMethodName();
if(methodName.equalsIgnoreCase(“checkSimultaneousBuildThrottle”)|
methodName.equalsIgnoreCase(“QuickRunk”)){
试一试{
睡眠(500);
}捕获(中断异常)
}否则{
投掷e;
}
}
}
返回连接;
}
您可以使用Thread.sleep()来处理它。
当达到最大连接数时,Proxool引发异常。一旦检测到它,您可以通过调用“Thread.sleep()”等待一段时间,希望在这段时间之后,连接将再次可用
public Connection getConnection() throws SQLException {
Connection conn = null;
while (conn ==null){
try {
conn = DriverManager.getConnection("proxool."+connectionPoolAlias);
} catch (SQLException e) {
e.printStackTrace();
String methodName =e.getStackTrace()[0].getMethodName();
if (methodName.equalsIgnoreCase("checkSimultaneousBuildThrottle") ||
methodName.equalsIgnoreCase("quickRefuse")){
try{
Thread.sleep(500);
}catch( InterruptedException ie){}
}else{
throw e;
}
}
}
return conn;
}
公共连接getConnection()引发SQLException{
连接conn=null;
while(conn==null){
试一试{
conn=DriverManager.getConnection(“proxool.”+connectionPoolAlias);
}捕获(SQLE异常){
e、 printStackTrace();
String methodName=e.getStackTrace()[0].getMethodName();
if(methodName.equalsIgnoreCase(“checkSimultaneousBuildThrottle”)|
methodName.equalsIgnoreCase(“QuickRunk”)){
试一试{
睡眠(500);
}捕获(中断异常)
}否则{
投掷e;
}
}
}
返回连接;
}