2016-06-23 29 views
0

Ich möchte einen Server mit Clojure-Boot starten, der weiterlaufen muss. Also habe ich eine -main Funktion gemacht, damit ich ./build.boot ausführen kann und die Hauptfunktion ausführen wird. In der Hauptfunktion starte ich einen Nicht-Daemon-Thread mit der Idee, dass die JVM solange läuft, wie es einen Nicht-Daemon-Thread gibt. Das Boot-Skript stoppt jedoch und mein Server stoppt ebenfalls. Was mache ich falsch?Warum läuft mein clojure-Boot-Skript nicht?

#!/usr/bin/env boot 

(defn -main [& args] 
    (let [t (Thread. #(loop [] 
         (println (java.util.Date.)) 
         (Thread/sleep 500) 
         (recur)))] 
    (.setDaemon t false) 
    (.start t) 
    (Thread/sleep 3000) 
    (println "I have started a non-daemon thread, but still I exit???"))) 

Ausgabe

#inst "2016-06-23T08:39:23.453-00:00" 
#inst "2016-06-23T08:39:24.005-00:00" 
#inst "2016-06-23T08:39:24.507-00:00" 
#inst "2016-06-23T08:39:25.009-00:00" 
#inst "2016-06-23T08:39:25.511-00:00" 
#inst "2016-06-23T08:39:26.013-00:00" 
I have started a non-daemon thread, but still I exit??? 

Nach dem das Skript endet.

+0

Wenn die Antwort Ihr Problem gelöst, sollten Sie akzeptieren es. – nha

Antwort

1

Ich denke Boot-Anrufe System/exit sobald die Aufgaben erledigt sind (ihre Funktion Anruf endet).

Sie benötigen eine Aufgabe join zu Ihrem erzeugte Thread zu ändern, so dass die -main Funktion nicht abgeschlossen wird, bis der erzeugte Thread nicht beendet hat:

(.join t)

+0

Sollte "(.join t)" sein, danke – zetafish

+0

Ja, tut mir leid. Ich habe es behoben. –