ColdFusion 站点有时会使用错误的数据库

ColdFusion site sometimes uses wrong database

我正在使用 IIS 在同一台服务器上设置两个 ColdFusion 站点(比如 "Site A" 和 "Site B")。这两个站点具有相同的源代码,但 URL 和数据源不同。 "Site A" 使用数据库 DB1,"Site B" 使用 DB2。

问题是,有时我注意到 "Site B" 使用的是 DB1 而不是 DB2。这个问题不是每次都出现。例如,如果我点击一个页面 10 次,其中大约 7 次使用正确的数据库,3 次使用错误的数据库。此问题与 "Site A" 无关,仅与 "Site B".

相关

我尝试了很多解决方案,例如重新创建数据源,每一步都转储数据库,但没有找到确切原因。还有其他人面临这个问题吗?我需要更新 ColdFusion 吗?

(根据评论扩展....)

初步猜测可能是代码中的某些内容指向了错误的位置。 您如何在 CF 代码中引用数据源(Application.cfc 中的数据源设置)?这 2 个 Application.cfc 文件是否具有 不同的 应用程序名称?他们应该。否则,两个应用程序将共享相同的设置。由于 Application.cfc 在每个请求开始时执行,因此可能会产生 race conditions,因为多个线程可能同时读取和写入共享数据源设置。

示例:

  1. "John" 请求 SiteA 中的页面。 SiteA 的 Application.cfc 执行。应用程序数据源设置为 DatasourceA;

    component {
       this.name = "MyApplication";
       this.datasource = "DatasourceA";
    }
    
  2. 同时,"Mike" 请求 SiteB 中的一个页面。 SiteB 的 Application.cfc 执行。应用程序数据源更改为 DatasourceB

    component {
       this.name = "MyApplication";
       this.datasource = "DatasourceB";
    }
    
  3. 然后 John 在 SiteA 上的请求运行一个查询。由于应用程序数据源现在是 DatasourceB,请求查询了错误的数据库。

解决方法是在 Application.cfc 中使用不同的应用程序名称。