Clojure 简单(st)Datomic测试程序在出口处挂起
以下程序在从anüberjar运行时,仅在使用内存中的数据库时才在末尾退出;连接到Datomic服务器时,它将无限期挂起,而不是退出JVM:Clojure 简单(st)Datomic测试程序在出口处挂起,clojure,datomic,Clojure,Datomic,以下程序在从anüberjar运行时,仅在使用内存中的数据库时才在末尾退出;连接到Datomic服务器时,它将无限期挂起,而不是退出JVM: (ns myns.example (:use [datomic.api :only [db q] :as d]) (:gen-class)) ;; WORKS: (def uri "datomic:mem://testdb") (def uri "datomic:free://localhost:4334/testdb2") (defn -m
(ns myns.example
(:use [datomic.api :only [db q] :as d])
(:gen-class))
;; WORKS: (def uri "datomic:mem://testdb")
(def uri "datomic:free://localhost:4334/testdb2")
(defn -main []
(println 1)
(when (d/create-database uri)
(d/connect uri))
(shutdown-agents)
(println 2))
运行方式:
lein uberjar && java -cp target/myns-0.1.0-SNAPSHOT-standalone.jar myns.example
产出:
1
2
然后挂起来。只有当程序启动时数据库不存在时,它才会挂起
有人知道为什么,或者如何修复吗?这适用于datomic-free-0.8.4020.26
和datomic-free-0.8.3941
更新——上述程序实际上会终止,但需要很长时间(>1分钟)。我想知道原因。
关闭代理程序
最多需要一分钟才能完成(假设没有代理程序正在运行操作)
这是由于
java.util.concurrent
缓存线程池的工作方式造成的。关闭代理需要一分钟才能完成(假设没有代理运行操作)
这是由于java.util.concurrent
缓存线程池的工作方式。使用
关闭
作用
用法:(关闭clojure)
关闭所有对等服务器
资源。此方法应作为清洁关机的一部分调用
JVM进程。将释放所有连接,如果关闭clojure
是真的,将释放Clojure资源。用Clojure编写的程序
如果他们管理clojure资源,则可以将shutdown clojure设置为false
(如代理人)Datomic以外的机构;用其他JVM编写的程序
语言通常应将shutdown clojure设置为true
在Datomic Clojure版本0.8.3861中添加
使用
关闭
作用
用法:(关闭clojure)
关闭所有对等服务器
资源。此方法应作为清洁关机的一部分调用
JVM进程。将释放所有连接,如果关闭clojure
是真的,将释放Clojure资源。用Clojure编写的程序
如果他们管理clojure资源,则可以将shutdown clojure设置为false
(如代理人)Datomic以外的机构;用其他JVM编写的程序
语言通常应将shutdown clojure设置为true
在Datomic Clojure版本0.8.3861中添加
您是否尝试过(d/release conn)
?尝试过,但没有明显区别--但我在过程中了解到,上面的程序最终会终止,它只需要一分钟(!!!)。您尝试过(d/release conn)吗
?尝试了一下,没有明显的区别——但我在过程中了解到,上面的程序最终会终止,只需要一分钟(!!!)。谢谢!无论我是否为关闭代理而烦恼,程序都需要一分钟左右的时间才能完成。知道为什么吗?我猜Datomic在调用它?如果不是这样的话,那么程序将永远挂起…谢谢,鉴于1分钟的时间刻度匹配,我认为这是一个公认的答案,尽管我不明白当我删除关机代理时关机是如何发生的。不过,我可能完全错了-而且时间只是巧合。尝试睡眠30秒,然后发送代理到println一些值。如果成功,则不涉及关机代理。谢谢!无论我是否为关闭代理而烦恼,程序都需要一分钟左右的时间才能完成。知道为什么吗?我猜Datomic在调用它?如果不是这样的话,那么程序将永远挂起…谢谢,鉴于1分钟的时间刻度匹配,我认为这是一个公认的答案,尽管我不明白当我删除关机代理时关机是如何发生的。不过,我可能完全错了-而且时间只是巧合。尝试睡眠30秒,然后发送代理到println一些值。如果成功,则不涉及关机代理。
(ns myns.example
(:require [datomic.api :as d])
(:gen-class))
(def uri "datomic:free://localhost:4334/testdb2")
(defn -main []
(d/create-database uri)
(let [conn (d/connect uri)]
(try
;; do something
(finally (d/shutdown true)))