2012-06-19 22 views
6

Powiel możliwe:
How to run an arbitrary startup function in a ring project?Wykonywanie funkcji po uruchomieniu aplikacji pierścień/compjure po wdrożeniu

używam pierścienia pośredniczącego Clojure z compojure, zbudowanie prostego API. Wdrażam aplikację często jako wojnę.

Działa to świetnie, ale szukam sposobów uruchomienia kodu uruchamiania po uruchomieniu aplikacji. Kiedy uruchamiam "Lein Ring Server", działa on całkiem dobrze - jednak po wdrożeniu jako wojna wydaje się działać tylko wtedy, gdy pierwsze żądanie trafi na serwer (czyli leniwy). Czy istnieje sposób, aby nie był leniwy (bez użycia AOT) - czy istnieje lepszy sposób na przechwycenie cyklu życia oprogramowania pośredniego?

+0

Canonical odpowiedź tutaj: http://stackoverflow.com/questions/13978623/how-to-run-an-arbitrary-startup-function-in-a-ring-project –

Odpowiedz

2

Myślę, że szukasz: init param w pluginu lein-ring. Skopiowane z https://github.com/weavejester/lein-ring:

:init - A function to be called once before your handler starts. It should take no 
arguments. If you've compiled your Ring application into a war-file, this function will 
be called when your handler servlet is first initialized. 
+0

, który działa przy uruchomieniu "serwera lein ring" i jest przydatny dla to jednak, gdy zostanie użyte jako wojna, funkcja ta nie jest w ogóle wywoływana. –

+1

Podstęp polegał na tym, że funkcja: init powinna * nie * być w projekcie.clj –

1

Implementacja ServletContextListener służyłoby potrzeb. Jeśli nie masz ochoty implementować go samodzielnie za pomocą :gen-class, możesz użyć narzędzi serwletu w projekcie ring-java-servlet.

Aby to zrobić, należy utworzyć plik z funkcjami szkoda zwanych podczas uruchamiania i/lub wyłączania:

(ns my.project.init 
    (:require [org.lpetit.ring.servlet.util :as util])) 

(defn on-startup [context] 
    (do-stuff (util/context-params context))) 

(defn on-shutdown [context] 
    (do-other-stuff (util/context-params context))) 

następnie podłączyć to do swojego webapp za pośrednictwem następujących web.xml ustawień:

<context-param> 
    <param-name>context-init</param-name> 
    <param-value>my.project.init/on-startup</param-value> 
</context-param> 
<context-param> 
    <param-name>context-destroy</param-name> 
    <param-value>my.project.init/on-shutdown</param-value> 
</context-param> 
<listener> 
    <listener-class>org.lpetit.ring.servlet.RingServletContextListener</listener-class> 
</listener> 
Powiązane problemy