你不會說代碼是在哪裏或者是如何/何時執行,所以不可能自信地回答你的問題。
如果它在Application.cfc中的onApplicationStart()中,那麼 - 是的 - 它只會在應用程序啓動時執行。
但是,如果它只是在某個文件中,每次調用該文件時都會重新執行,除非您採取措施確保調用而不是。 EG:把條件周圍:
<cfif not (structKeyExists(application, "components") and structKeyExists(application.components, "blog"))>
<cfset application.components.blog = createObject('component','sharedcomponents.cfc.blog').init()>
</cfif>
你好像如果一些魔術發生在因爲你的變量賦值設定一些在應用範圍是CF會自動知道,如果該文件不重新運行它想知道它的在重新執行。不,CF只是按照它所告訴的:如果你告訴它運行該代碼,它將被運行。不管變量分配的範圍如何。
您繼續詢問有關檢測文件是否已更新並相應地重新啓動整個應用程序。這些文件如何更新?我認爲它是活動部署過程的一部分(例如:你需要做一些部署)。如果是這樣的話,是不是你處於最佳位置知道應用何時需要重啓?首先,並非每個代碼更改都會保證應用程序重新啓動,所以您不想自動執行這些操作,我應該這樣想?
如果您需要重新啓動應用程序,您應該有一個運行applicationStop()
的腳本。有些人的onRequestStart()
檢查URL參數,如果它通過,則會調用applicationStop()
,但我個人認爲這是錯誤的地方。對於幾乎所有的條件都不相關的請求,所以沒有必要檢查它對每一百萬次事件的請求,因爲它實際上是相關的。我更喜歡有一個單獨的腳本來完成它,這被稱爲需求必須。
我覺得CFIF的第二部分應讀「而不是structKeyExists(application.components,‘博客’)」我試圖編輯代碼,但StackOverflow上有一個愚蠢的生意規則編輯需要6個「非空間」字符或更多。 – 2012-07-11 12:02:18
@Scott:整個事情都是在'NOT',配偶。除非我錯過了一些東西,這就是我們想要的。如果'application.components.blog'不存在,那麼設置它。否則繼續前進。 – 2012-07-11 13:41:22
Ack ....所以這是....愚蠢的老眼睛和括號...... – 2012-07-11 14:55:38