2015-07-20 76 views
4

我嘗試使用Cassaforte來查詢我的cassandra db,但是當我啓動我的代碼時,它永遠不會結束。Cassaforte/clojure:永不結束的程序

(defn cassandra [] 
    (let [conn (cc/connect ["127.0.0.1", "127.0.0.2", "127.0.0.3"]) 
     table "mytable"] 
    (cql/use-keyspace conn "mykeyspace") 
    (cql/select conn table (limit 10)))) 

(defn -main 
    "I don't do a whole lot ... yet" 
    [& args] 
    (println "Hello, World!") 
    (let [result (cassandra)])) 

結果:

$ lein run 
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 
Hello, World! 
[the program is waiting here] 

如果我打印結果變種,它包含了行,但經過同樣的問題。

有什麼想法?

回答

3

你的程序完成後,你只是沒有告訴JVM你明確地想要在主結束時退出。你可以通過添加:

(System/exit 0) 

到你的主結束。與只用java編寫的相對較小的程序不同,Clojure已經在後臺啓動了一些線程池,以便代理運行在其上。這些導致JVM認爲某個線程可能仍然需要運行,並且不會立即退出。從那以後,這已被Clojure社區採用。

+0

它的工作原理,謝謝! – Arthe

+0

java驅動程序(cassaforte使用)也創建一些線程池。您可以通過關閉客戶端(cc/disconnect)來關閉這些服務器。 –

+0

(cc/disconnect)只會關閉會話,您想使用(cc/disconnect!)來關閉集羣 –