这要看情况。此查询数据多久更新一次?如果它确实是不变的,那么 onApplicationStart() 是一个放置它的好地方。但是,如果它会经常更改,您可以告诉 Coldfusion将查询缓存一段时间,然后您不需要弄乱 onApplicationStart(),而是当您调用查询时它会返回自动缓存结果(在您指定的时间段内)。
无论如何,我会编写一个自定义函数来检索数据。然后从 onApplicationStart() 或其他地方调用它是微不足道的。
Startup.cfc:(随便命名)
<!--- Replace the datasource name with your db name --->
<cffunction name="getStartupQuery" hint="Returns a query recordset for startup">
<cfargument name="datasource" required="no" type="string" default="OtherAppDB">
<!--- Init the query variable --->
<cfset var result = queryNew("id")>
<!-- Get the query dataset --->
<cfquery name="result" datasource="#arguments.datasource#">
YOUR QUERY HERE
</cfquery>
<cfreturn result>
</cffunction>
Application.cfc:(只是重要的部分)
<cffunction name="onApplicationStart">
<!--- init the startup.cfc, then retrieve the data
and save it to the application scope. Remember the component name must match
your component above --->
<cfset var startup = createObject("component", "startup")>
<cfset application.varFromOtherDB = startup.getStartupQuery()>
<cfreturn true>
</cffunction>
现在,您应该可以使用以下命令从应用程序中的任何 CFM 或 CFC 访问此变量:
<cfset myNewVar = application.varFromOtherDB>
or
#application.varFromOtherDB#
如果您使用 onApplicationStart() 方法,我强烈建议您实施一种方法来重新初始化应用程序。例如,请参阅其他讨论。