我可以在运行时指定动态数据源吗?

vol*_*one 4 coldfusion coldfusion-11

我的应用程序托管在一个服务于许多客户的中央服务器上.现在,它需要与驻留在客户所在位置的数据库服务器交叉引用信息.

我想存储客户服务器的详细信息以及他们的帐户详细信息(例如dbname,host,port等).

但是,根据谁登录到应用程序,我需要将其数据连接详细信息提供给<cfquery>函数以执行查找.像这样的东西:

<cfquery name="rsOrders" datasource="{dynamically provided connection string}">
SELECT *
FROM
CompanysDBTable
</cfquery>
Run Code Online (Sandbox Code Playgroud)

我知道有一个管理员API以编程方式创建数据源,但是使用它会意味着我的系统中有一个额外的过程,如果客户需要更新数据源详细信息会发生什么?

那么有没有办法像上面那样在飞行中做到这一点?也就是说,在<cfquery>标签内提供数据连接字符串.

或者有更好的方法完成这项工作吗?

Ada*_*ron 6

您可以在ColdFusion 11中的运行时创建特定于应用程序的数据源.请参阅文档:" Application.cfc中的特定于应用程序的数据源 ".我还在我的博客中讨论了这个问题:" 在Application.cfc中定义数据源 ".

一个例子是:

// Application.cfc
component {

    this.name = "DSNTest02";
    this.datasources = {
        scratch_mssql_app    = {
            database    = "scratch",
            host        = "localhost",
            port        = "1433",
            driver      = "MSSQLServer",
            username    = "scratch",
            password    = "scratch"
        },
        scratch_embedded_app    = {
            database    = "C:\apps\adobe\ColdFusion\11\full\cfusion\db\scratch",
            driver        = "Apache Derby Embedded"
        }
    };
    this.datasource    = "scratch_mssql_app";

}
Run Code Online (Sandbox Code Playgroud)

这是ColdFusion最接近的.

如果你直接使用JDBC,你可以在创建连接时给出连接字符串,但是你的代码需要与JDBC驱动程序返回的记录集竞争,这不是CFML查询对象.