我正在構建一個Clojure Noir Web應用程序,以在CloudFoundry中作爲WAR文件運行。Clojure Noir WAR/Servlet(CloudFoundry)的初始化鉤子
在我project.clj我:
:ring {:handler appname.server/handler}
在server.clj我創建使用比諾的處理程序:
(def handler (noir.server/gen-handler {:ns 'appname}))
我建立使用雷音環插件WAR文件:
lein ring uberwar
然後推送到CloudFoundry使用:
vmc push appname
請求處理程序正常工作,我可以瀏覽到應用程序的URL就好了。
所以問題是:當應用程序啓動時進行初始化的正確方法是什麼?
我可以做server.clj如下:
(when (System/getenv "VCAP_APPLICATION")
(init-func))
但也有一對夫婦的問題。首先,它似乎是在錯誤的時間進行初始化(當代碼被讀取/評估而不是在應用程序啓動時)。其次,保護者特定於CloudFoundry,並且我確定有一個適當的一般WAR方法來執行此操作。
我認爲這是ServletContextListener的contextInitialized方法的目的,但我如何鉤住Noir/ring?