我的是struts2+hibernate+spring的结构,用了proxool连接池,请教两个问题,
我的配置如下:
</driver-properties>
<!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>100</maximum-connection-count>
<!--最小连接数(默认2个)-->
<minimum-connection-count>10</minimum-connection-count>
<!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒-->
<house-keeping-sleep-time>30000</house-keeping-sleep-time>
<!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>10</maximum-new-connections>
<!--最少保持的空闲连接数(默认2个)-->
<prototype-count>5</prototype-count>
<!--在使用之前测试-->
<test-before-use>true</test-before-use>
但问题是,我在本机测试时,发现用PROXOOL的监控页面,发现
connections:2 (active),30(available),100(MAX),那么我想
问下的是:这里30是否说目前连接池能提供30个可用的连接呢?
这个avaiable的值是系统自动分配的还是可以通过proxtool设置的呢?我发现一放到真实环境上去测试,
就看到avaiable的值才变成10个,变的很小了,代码等都是一样的,这个大概如何解析呢?
我的配置如下:
</driver-properties>
<!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->
<maximum-connection-count>100</maximum-connection-count>
<!--最小连接数(默认2个)-->
<minimum-connection-count>10</minimum-connection-count>
<!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒-->
<house-keeping-sleep-time>30000</house-keeping-sleep-time>
<!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
<maximum-new-connections>10</maximum-new-connections>
<!--最少保持的空闲连接数(默认2个)-->
<prototype-count>5</prototype-count>
<!--在使用之前测试-->
<test-before-use>true</test-before-use>
但问题是,我在本机测试时,发现用PROXOOL的监控页面,发现
connections:2 (active),30(available),100(MAX),那么我想
问下的是:这里30是否说目前连接池能提供30个可用的连接呢?
这个avaiable的值是系统自动分配的还是可以通过proxtool设置的呢?我发现一放到真实环境上去测试,
就看到avaiable的值才变成10个,变的很小了,代码等都是一样的,这个大概如何解析呢?
解决方案 »
- 日期问题,请大家帮忙
- 关于strus2 iterator标签问题
- 关于面向对象,两年了还是没弄明白
- 求救!Strut2+hibernate3.3+Spring3整合出的错误.
- createSQLQuery的使用问题
- 关于J2EE, B/S 分工开发的问题
- 请问我上传的图片大小一样,就是打不开?! 上传文本TXT可以
- [请教]IDEA中JUnit plugin如何使用?
- 请教openldap的配置和使用
- 请问synchronized 的一些疑惑
- 我跳过service层直接调用dao层,hibernatedaotemplate能自动关闭session么?
- 咨询下JAVA和C#在做BS数据库系统时的差别
启动时那个30应该是10(mininum)?真实环境,构造一个测试程序,光请求连接不释放,再看咯,肯定很快超过10
package net.blogjava.lzqdiy;import java.net.URL;
import java.sql.*;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
import org.logicalcobwebs.proxool.admin.SnapshotIF;public class DBConnection
{ private static boolean initialized = false; private static int activeCount = 0; public static Connection getConnection() throws SQLException
{
Connection connection = null;
if (!initialized)
{ init();
} connection = DriverManager.getConnection("proxool.Develop");
try
{
SnapshotIF snapshot = ProxoolFacade.getSnapshot("Develop", true);
int curActiveCount = snapshot.getActiveConnectionCount();// 获得活动连接数
int availableCount = snapshot.getAvailableConnectionCount();// 获得可得到的连接数
int maxCount = snapshot.getMaximumConnectionCount();// 获得总连接数
if (curActiveCount != activeCount)// 当活动连接数变化时输出信息
{
System.out.println("----------------------------------");
System.out
.println(curActiveCount + "(active) " + availableCount
+ "(available) " + maxCount + "(max)");
System.out.println("----------------------------------");
activeCount = curActiveCount;
} } catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
if (connection != null)
{ return connection;
} else
{
throw new NullPointerException(
"Didn't get connection, which probably means that no Driver accepted the URL");
} } private static void init()
{
String fileName = "proxool.xml";
URL resourceURL = null;
try
{
if (Thread.currentThread().getContextClassLoader() != null)
{
resourceURL = Thread.currentThread().getContextClassLoader()
.getResource(fileName);
} if (resourceURL == null)
{
resourceURL = DBConnection.class.getClassLoader().getResource(
fileName);
} JAXPConfigurator.configure(resourceURL.getFile(), false);
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ProxoolException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
initialized = true;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>Develop</alias>
<driver-url>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.6)(PORT=1521)))(CONNECT_DATA=(SID=lzqdiy)(SERVER=DEDICATED)))
</driver-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<driver-properties>
<property name="user" value="lzqdiy"/>
<property name="password" value="lzqdiy"/>
</driver-properties>
<maximum-connection-count>120</maximum-connection-count>
<minimum-connection-count>20</minimum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>http://java.chinaitlab.com/advance/719806.html
但我很快,都10点多了,很快就发现last start里有时间显示里,这个时候应该是有连接过来了吧?但业务专家分析,我们的系统,不大可能晚上也经常有连接过来的,我观察了周6,日,晚上也都是这个情况,不大符合逻辑,那个last start的含义其实是什么呢?