【发布时间】:2012-02-01 23:51:25
【问题描述】:
我正在构建一个 Clojure Noir Web 应用程序,以在 CloudFoundry 中作为 WAR 文件运行。
在我的 project.clj 我有:
:ring {:handler appname.server/handler}
在 server.clj 中,我使用 Noir 创建了一个处理程序:
(def handler (noir.server/gen-handler {:ns 'appname}))
我使用 lein ring 插件构建 WAR 文件:
lein ring uberwar
然后使用以下命令推送到 CloudFoundry:
vmc push appname
请求处理程序工作正常,我可以很好地浏览到应用程序的 URL。
那么问题来了:应用启动时进行初始化的正确方法是什么?
我可以在 server.clj 中执行以下操作:
(when (System/getenv "VCAP_APPLICATION")
(init-func))
但这有几个问题。首先,似乎是在错误的时间进行初始化(当代码被读取/评估而不是在应用程序启动时)。其次,保护器是 CloudFoundry 特有的,我确信有一种适当的通用 WAR 方法可以做到这一点。
我认为这是 ServletContextListener 上 contextInitialized 方法的目的,但我如何将它与 Noir/ring 挂钩?
【问题讨论】:
标签: java clojure war leiningen