【问题标题】:Change "global" datasource dynamically动态更改“全局”数据源
【发布时间】:2012-09-19 13:19:42
【问题描述】:

我通常在 Application.cfc 的第一行中设置应用程序范围的数据源名称:

<cfscript>THIS.datasource="mydsn";</cfscript>

如果我需要在代码的某些部分更改它怎么办?

具体来说,我的意思是:

  • 如果 cgi.server_name 等于 "www.firsturl.com" => this.datasource = "firstdsn"
  • 如果 cgi.server_name 等于 "www.secondurl.com" => this.datasource = "seconddsn"

我可以为每个请求都这样做吗?

【问题讨论】:

  • 这很容易让您简单地测试一下,看看会发生什么,对吗?只需在 Application.cfc 中为 this.datasource 声明添加条件...

标签: coldfusion datasource coldfusion-10 application.cfc


【解决方案1】:

好的,尽管我对您的原始帖子发表了评论 - 找出这些事情的最佳方法就是 尝试一下 看看会发生什么,答案是:是的。

Application.cfc 的名字很糟糕,因为它暗示它是一种特定于应用程序的,但实际上整个事物都是在每个请求时实例化的。一些事件处理程序只在给定的情况下运行(onApplicationStart / onSessionStart 等)既不存在也不存在:整个事情运行每个请求。因此,与任何被实例化的 CFC 一样,伪构造函数代码(在其中进行 this 范围的变量声明)也会在每个请求中运行。

这意味着是的,您可以根据特定于请求的信息(请求、CGI、URL、表格等;但不是应用程序或会话)有条件地设置任何这些变量。因此,基于 CGI 变量的条件可以正常工作。

但不要相信我的话:试试吧!总是尝试这些事情。

最后,为了稍微插一嘴,我会在我的博客this article 中深入讨论什么时候在 Application.cfc 中运行。不妨读一读,或者在你在那里的时候看看 Application.cfc 上的其他文章。

【讨论】:

  • 我没有对此进行测试,但我认为如果在 onSessionEnd 内部发生任何查询,则需要小心使用此方法,因为 CGI 范围不会具有预期值。
  • 是的,有一些奇怪的东西(而不是人们所期望的)。太多(而不是主题)要通过,但我会在我的博客上介绍它:adamcameroncoldfusion.blogspot.co.uk/2012/09/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
相关资源
最近更新 更多