2016-06-23 4 views
0

Je veux démarrer un serveur avec un démarrage clojure qui doit continuer à fonctionner. J'ai donc fait une fonction -main pour pouvoir exécuter ./build.boot et exécuter la fonction principale. Dans la fonction principale, je démarre un thread non démon avec l'idée que la JVM continue à fonctionner tant qu'il y a un thread non démon. Cependant, le script de démarrage s'arrête et mon serveur s'arrête également. Qu'est-ce que je fais mal?Pourquoi mon script de démarrage clojure s'arrête-t-il

#!/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???"))) 

Sortie

#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??? 

Après qui se termine le script.

+0

Si la réponse résout votre problème, vous devez accepter il. – nha

Répondre

1

Je suppose que le démarrage appelle System/exit une fois les tâches terminées (leur appel de fonction se termine).

Vous devez modifier votre tâche join à votre fil donné naissance si la fonction -main ne se termine pas jusqu'à ce que votre fil donné naissance n'a pas fini:

(.join t)

+0

Devrait être '(.join t)', merci – zetafish

+0

Oui, désolé. Je l'ai réparé. –