- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我经历了几个问题,this 有点相关,但没有回答我的问题。
c3p0连接池maxPoolSize
是否保证某个时间的连接数永远不会超过这个限制?如果 maxPoolSize=5
和 10 个用户完全同时开始使用该应用程序会怎样?
我的应用程序。配置
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass"><value>${database.driverClassName}</value>/property>
<property name="jdbcUrl"><value>${database.url}</value></property>
<property name="user"><value>${database.username}</value></property>
<property name="password"><value>${database.password}</value></property>
<property name="initialPoolSize"><value>${database.initialPoolSize}</value>/property>
<property name="minPoolSize"><value>${database.minPoolSize}</value></property>
<property name="maxPoolSize"><value>${database.maxPoolSize}</value></property>
<property name="idleConnectionTestPeriod"><value>200</value></property>
<property name="acquireIncrement"><value>1</value></property>
<property name="maxStatements"><value>0</value></property>
<property name="numHelperThreads"><value>3</value></property>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
<property name="dataSource" ref="dataSource"/>
</bean>
最佳答案
区分数据源和连接池很重要。
maxPoolSize 由 c3p0 在每个池的基础上强制执行。但是单个 DataSource 可能拥有多个连接池,因为每组身份验证凭据都有(并且必须)一个不同的池。如果只调用了默认的 dataSource.getConnection()
方法,则 maxPoolSize 将是池获取和管理的最大连接数。但是,如果使用 dataSource.getConnection( user, password )
获取连接,则 DataSource 最多可容纳 (maxPoolSize * num_distinct_users)
连接。
回答您的具体问题,如果 maxPoolSize
是 5 并且 10 个客户端同时访问 c3p0 数据源,则其中不超过 5 个将首先获得连接。其余客户端将 wait()
直到连接返回(或 c3p0.checkoutTimeout
已过期)。
一些警告:c3p0 强制执行 maxPoolSize
,如上所述。但不能保证,即使只使用了一个 per-auth 池,您偶尔也不会看到超过 maxPoolSize
的连接被 check out 。例如,c3p0 过期并异步销毁连接。就 c3p0 而言,一旦 Connection 对客户端不可用并标记为销毁,而不是在它实际被销毁时,它就会消失。因此,如果 maxPoolSize
为 5,您可能偶尔会在数据库中观察到 6 个打开的连接。池中将有 5 个连接处于事件状态,而第 6 个连接正在等待销毁但尚未销毁。
您可能会意外看到许多连接打开的另一种情况是,如果您在运行时修改连接池属性。实际上,内部连接池的配置是不可变的。当您在运行时“更改”池参数时,实际发生的是使用新配置启动新池,而旧池进入“结束”模式。从旧池中 checkout 的连接仍然有效且有效,但当它们 checkin 时,它们将被销毁。只有当所有旧池连接都被重新 checkin 时,池才真正死亡。
因此,如果您有一个已 check out maxPoolSize
连接的池,然后更改配置参数,您可能会暂时看到高达 (2 * maxPoolSize)
的峰值,如果新池在从旧池中 check out 的连接之前被大量流量击中被退回。在实践中,这很少是一个问题,因为动态重新配置不是那么常见,并且连接 check out 应该并且通常非常简短,因此旧池连接迅速消失。但它可能发生!
我希望这有帮助。
ps acquireIncrement
最好设置为大于 1 的值。acquireIncrement
的 1 意味着没有连接在需求之前被预取,因此每当负载增加时,一些线程将直接体验连接获取的延迟。
关于datasource - c3p0 连接池是否确保最大池大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932846/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!