开发者社区> 问答> 正文

连接数问题 Hibernate

爵霸 2016-03-04 09:21:20 1144
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <!-- 连接池的别名 -->
        <property name="alias" value="koko" />
        <!-- 数据库连接驱动 -->
        <property name="driver" value="${driverClassName}" />
        <!-- 数据库连接地址 -->
    <property name="driverUrl" value="${url}" />
    <!-- 数据库访问用户名 -->
    <property name="user" value="${username}" />
    <!-- 数据库访问密码 -->
    <property name="password" value="${password}" />
    <!-- 最少保持的空闲连接数 -->
    <property name="prototypeCount" value="5" />
    <!-- 如果某个线程的活动时间大于这个数值,会杀掉这个线程,默认5分钟,单位:毫秒 -->
    <property name="maximumActiveTime" value="360000" />
    <!-- 最大连接数 -->
    <property name="maximumConnectionCount" value="300" />
    <!-- 最小链接数 -->
    <property name="minimumConnectionCount" value="10" />
    <!-- 可一次建立的最大连接数 -->
    <property name="simultaneousBuildThrottle" value="20" />
    <!-- 测试空闲连接 -->
    <property name="houseKeepingTestSql" value="select 1 from dual" />
    <property name="trace" value="true" />
</bean>

配置的链接数里面都没有出现过15这个数字,但是在实际运行过程,却出现获取不到链接,是因为已经达到了最大的连接数(15/15),如下图所示:
screenshot
请问这是为何?数据库是Oracle 11g版本。程序框架用的是SH(Sprign+Hibernate)

Oracle 关系型数据库 Java 数据库连接 Shell 数据库 数据安全/隐私保护
分享到
取消 提交回答
全部回答(1)
  • 爵霸
    2019-07-17 18:51:48

    这个注解的说明就是一次性可以创建的最大的请求数,同时,我在ProxoolDataSource类中,也没有找到这个相关的属性字段,具体如下:

    private int loginTimeout;
        private PrintWriter logWriter;
        private String alias;//连接池的别名
        private String driver;//驱动
        private String fatalSqlExceptionWrapperClass;
        private long houseKeepingSleepTime;//保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建.
         //;自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒,
        private String houseKeepingTestSql;// 如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。
        private long maximumActiveTime;//线程最大活动时间,如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟
        private int maximumConnectionCount;//最大连接数
        private long maximumConnectionLifetime;//一个线程的最大寿命
        private int minimumConnectionCount;//最小链接数
        private long overloadWithoutRefusalLifetime;//这可以帮助我们确定连接池的状态。如果我们已经拒绝了一个连接在这个设定值(毫秒),然后被认为是超载。默认为60秒。
        private String password;//数据库密码
        private int prototypeCount;//最保持的空闲连接数
        private long recentlyStartedThreshold;//这可以帮助我们确定连接池的状态,连接数少还是多或超载。只要至少有一个连接已开始在此值(毫秒)内,
        //或者有一些多余的可用连接,那么我们假设连接池是开启的。默认为60秒
       private int simultaneousBuildThrottle;//这是我们可一次建立的最大连接数。那就是新增的连接请求,但还没有可供使用的连接。由于连接可以使用多线程,在有限的时间之间建立联系从而带来可用连接,
        //但是我们需要通过一些方式确认一些线程并不是立即响应连接请求的,默认是10。
        private String statistics;//连接池使用状况统计。 参数“10s,1m,1d”
        private String statisticsLogLevel;//日志统计跟踪类型。 参数“ERROR”或 “INFO”
        private boolean trace;//如果为true,那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL).你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息
        private String driverUrl;//数据库链接字符串
        private String user;//数据库用户名
        private boolean verbose;
        private boolean jmx;
        private String jmxAgentId;
        private boolean testBeforeUse;//如果为true,在每个连接被测试前都会服务这个连接,如果一个连接失败,那么将被丢弃,另一个连接将会被处理,如果所有连接都失败,
        //一个新的连接将会被建立。否则将会抛出一个SQLException异常。
        private boolean testAfterUse;//如果为true,在每个连接被测试后都会服务这个连接,使其回到连接池中,如果连接失败,那么将被废弃
    0 0
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题