Ну, это зависит. Как часто обновляются данные запроса? Если это действительно не меняется, то onApplicationStart() - прекрасное место для его размещения. Однако, если он будет меняться каждый раз так часто, вы можете просто указать Coldfusion на cache the query для a certain period of time, тогда вам не нужно возиться с 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(), я очень прн ommend, реализующий метод для повторного использования приложения. Например, see this other discussion.
Какая версия ColdFusion? Если вы находитесь на CF9, посмотрите на тег CFCACHE. – kevink
Я использую Coldfusion 8 – CFUser