Является ли onApplicationStart хорошей идеей в ColdFusion? - PullRequest
2 голосов
/ 20 декабря 2009

Мне нужно использовать переменную (Query Resultset) в ColdFusion , которая будет получать результаты из базы данных других приложений и сохранять в приложении Coldfusion.

Основная идея заключается в том, что мне нужно вызывать другую БД приложений только во время запуска Сервера и кэшировать результаты локально. И мне нужно прочитать переменную на других страницах моего приложения. Я не буду перезаписывать эту переменную на любой странице.

При поиске в Google я обнаружил, что 'onApplicationStart' полезно назначать переменные во время запуска приложения.

Хорошо ли использовать onApplicationStart или есть другой способ? Мы можем назначить переменную во время запуска (один раз).

Если onApplicationStart хорошо: как использовать? Может быть, любая ссылка, где это объяснено ясно, полезна.

1 Ответ

8 голосов
/ 20 декабря 2009

Ну, это зависит. Как часто будут обновляться эти данные запроса? Если он действительно не меняется, то 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 (), я настоятельно рекомендую реализовать метод для повторного запуска приложения. Например, см. Это другое обсуждение .

...