我在ColdFusion Administrator中创建了两个不同的数据源连接(到MS SQL Server 2008),除了连接的实际名称之外,它们具有完全相同的设置。我的问题是,这会创建两个不同的连接池,还是会共享一个?
答案 0 :(得分:1)
他们有不同的游泳池。池化由cf java代码实现。 (或者是jrun代码中的那部分......)。它不使用任何基于jdbc的池。 Cf10可能已切换到基于jdbc的池,但我对此表示怀疑。
作为测试
在两个池上设置'verify connection'sql for wait-for delay'00:01:00'或类似(等待1分钟)。由于池访问对于每个池是单线程的 - 包括运行验证所花费的时间 - 每个访问不同的数据源有2个页面,请求两者。如果他们在1分钟后完成它是2个游泳池,如果一个页面需要1分钟而另一个需要2分钟 - 它是一个游泳池
作为旁注,如果在这1分钟内验证你拉出网线(导致jdbc套接字永远保持打开等待响应),你的线程池现在已经死了,你需要重新启动CF
答案 1 :(得分:1)
他们会有不同的游泳池。这些池是在数据源级别定义的,就ColdFusion而言,您有两个不同的数据源。为什么您有两个不同的数据源具有完全相同的设置?我想如果你想强迫他们使用不同的连接池。我想不出有什么原因。
我找到了记录how database connections are handled in ColdFusion的此页面。请注意,为每个数据源设置了“维护数据库连接”设置。
以下是与该页面的连接池相关的部分(如果它消失了):
如果为数据源设置了“维护数据库连接”,ColdFusion Server如何维护连接池?
为数据源设置“维护数据库连接”时,ColdFusion会在首次连接数据库后保持连接处于打开状态。在第一次连接后,它不会退出数据库。您可以根据上面步骤d中的说明更改此设置。 ColdFusion Administrator中的另一个设置称为“将缓存的数据库连接非活动时间限制为X分钟”,在X非活动分钟后关闭“已维护”的数据库连接。此设置是服务器范围的,并确定何时最终关闭“维护”连接。您可以通过转到ColdFusion Administrator中的“缓存”选项卡来修改此设置。用于修改“将高速缓存的数据库连接非活动时间限制为X分钟”的界面如下所示:
如果请求正在使用已打开的数据源连接,并且另一个数据源请求进入,则建立新连接。由于只有一个请求可以随时使用连接,因此同时请求将打开一个新连接,因为没有空闲的缓存连接可用。连接池可以增加到为每个数据源设置的同时连接限制的设置。此设置称为“限制连接”,位于ColdFusion管理员中。单击其中一个数据源选项卡,然后单击其中一个数据源。单击“CF设置”并选中“限制连接”旁边的复选框,然后在句子“启用X个并发连接的限制”中输入一个数字。请注意,如果您未在数据源设置下设置此项,ColdFusion Server将使用服务器范围的“同时请求”设置。
此时,ColdFusion Server维护了两个数据库连接池。每个连接都保留在池中,直到达到“连接超时”时间或超过不活动时间。如果前两个选项都未实现,则连接将保留在池中,直到重新启动ColdFusion。
“连接超时”设置会关闭连接并将其从池中删除,无论它是处于活动状态还是非活动状态。如果进程处于活动状态,则不会终止连接。您可以通过在ColdFusion Administrator中转到数据源的“CF设置”来更改此设置。注意:只有“缓存的数据库连接非活动时间”设置才会结束连接,如果尚未使用,则将其从池中删除。您还可以使用“连接超时”覆盖“缓存的数据库连接不活动”设置,因为它仅适用于单个数据源,而不是所有数据源。
答案 2 :(得分:0)
尝试使用两个不同的数据源创建临时表,如果第二个查询出错,则使用相同的池并运行完美文件意味着不同的池。