我必须在ColdFusion中使用一个Variable(Query Resultset),它将从Other Application DB获取结果,并将其存储在Coldfusion Application中。
主要思想是仅在服务器启动时才需要调用另一个Application DB,并将结果缓存在本地。而且我需要在我的应用程序的其他页面中读取变量。我不会在任何页面中覆盖该变量。
在谷歌搜索中,我发现“onApplicationStart
”对于在应用程序启动时分配变量很有用。
使用onApplicationStart
很好还是还有其他方法吗?我们可以在启动时(一次)分配一个变量。
如果onApplicationStart
很好:如何使用?也许任何对其进行清楚解释的链接都是有帮助的。
最佳答案
这要看情况。此查询数据多久更新一次?如果确实没有变化,那么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()方法,则我强烈建议实现一种方法来重新初始化应用程序。例如,see this other discussion。