用Clojure编写REST service 七 启动时读取配置文件

有了前面的namespace模块化的基础,现在重构一下代码。

像一般的web 应用,启动的时候读取配置文件,然后将配置信息保存在全局变量中。

以后用到就读这个变量。

现在在server.clj文件中修改如下:

(ns my-website.server
  (:require [noir.server :as server])
  (:use [clojure.tools.logging :only (info error)])
  (:use [my-website.config :as config]))

(server/load-views-ns 'my-website.views)
(server/load-views-ns 'my-website.rest.test)

(defn -main [& m]
  (org.apache.log4j.BasicConfigurator/configure)
  (info "enter -main")
  (def mongo_host (config/host "a.clj"))
  (info mongo_host)
  (let [mode (keyword (or (first m) :dev))
        port (Integer. (get (System/getenv) "PORT" "8080"))]
    (server/start port {:mode mode
                        :ns 'my-website})))

server.clj中用到了config.clj文件,代码如下:

(ns my-website.config)

(def load_config (fn [name] (load-file (str "/opt/" name))))

(def host 
  (fn [name] (:mongodb (load_config name))))

最后,test.clj代码修改一下:

(ns my-website.rest.test
  (:require [noir.response :as response])
  (:use [noir.core :only [defpage]])
  (:use [my-website.config :as config])
  (:use [my-website.server :as server]))

(defpage "/rest/:id" {:keys [id]} (response/json {:userId id}))

(defpage "/rest/file" {:keys [name]} (str "mongodb host: " server/mongo_host))

service.clj中的-main函数在web service启动时被执行,会读取配置文件,并保存在var mongo_host中。

test.clj中使用这个var,并返回给浏览器。


当浏览器上请求http://localhost:8080/file 的时候,显示结果为:

mongodb host: localhost


你可能感兴趣的:(用Clojure编写REST service 七 启动时读取配置文件)