beherbergung/backend/src/beherbergung/webserver/state.clj

26 lines
1.1 KiB
Clojure

(ns beherbergung.webserver.state
(:gen-class) ;; this Class contains our -main function
(:require [ring.adapter.jetty]
[ring.middleware.reload]
[beherbergung.webserver.handler]
[mount.core :as mount :refer [defstate]]
[beherbergung.config.state]
[signal.handler :refer [with-handler]]))
(defstate ^{:on-reload :noop} ;; When the app is recompiled, mount should not care, but we use ring.middleware.reload/wrap-reload
webserver
:start (do (println (str "Start server at http://localhost:" (:port beherbergung.config.state/env)))
(ring.adapter.jetty/run-jetty (ring.middleware.reload/wrap-reload #'beherbergung.webserver.handler/app)
{:port (:port beherbergung.config.state/env) :join? false}))
:stop (.stop webserver))
(defn -main [& _args]
(mount/start)
(let [finaly (fn [] (mount/stop) ;; Export the database
(System/exit 0))]
(with-handler :term (finaly)) ;; kill
(with-handler :int (finaly))) ;; Ctrl+C
(mount.core/running-states)) ;; Return value for debugging when called on repl