Scala elastic4s不退出
我尝试运行elastic4s的示例代码,如下所示Scala elastic4s不退出,scala,
elasticsearch,elastic4s,Scala,
elasticsearch,Elastic4s,我尝试运行elastic4s的示例代码,如下所示 import com.sksamuel.elastic4s.ElasticClient import com.sksamuel.elastic4s.ElasticDsl._ object hw extends App { val client = ElasticClient.local client.execute(create index "bands") client.execute { index into "bands/ar
import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._
object hw extends App {
val client = ElasticClient.local
client.execute(create index "bands")
client.execute { index into "bands/artists" fields "name"->"coldplay" }.await
val resp = client.execute { search in "bands/artists" query "coldplay" }.await
println(resp)
client.close
}
程序正确打印结果,但不会自行退出。我不知道我的代码或环境是否有问题。尝试使用
关机
shutdown
实际上将委托给PrepareNodeShutdown
,这是执行和关闭节点的方法<代码>关闭不带任何参数将关闭本地节点
编辑:添加代码和javadoc链接
以下内容确实适用于我,并在elastic4s 1.4.0中按预期工作(即主电路终止)
JVM在所有线程退出之前不会退出。我不熟悉elastic4s,但您可能希望在
客户端关闭之前先执行客户端关闭
?或者在调试器中运行它并检查哪些线程仍在运行。我可以确认相同的行为。事实上,即使您只是打开客户端并立即关闭它,也会发生这种情况。close调用只是Java客户端的一个包装器,所以我不确定它为什么不立即终止。@Imm这不起作用……有关闭方法吗?客户端类有javadoc,我看不到关闭,只有关闭。这是行不通的。甚至在最后一行调用sys.exit(0)也不起作用。我不知道为什么。我只检查了elastic4s,关机似乎是java.admin.cluster.PrepareNodeShutdown
的包装,由@user3567830发布的示例对我有用。我认为在关闭客户端之前调用shutdown可能更合适一些,但无论哪种方式,它似乎都能工作。
import com.sksamuel.elastic4s.ElasticClient
import com.sksamuel.elastic4s.ElasticDsl._
object Main extends App {
val client = ElasticClient.local
client.execute(create index "bands")
client.execute { index into "bands/artists" fields "name"->"coldplay" }.await
val resp = client.execute { search in "bands/artists" query "coldplay" }.await
println(resp)
client.close()
client.shutdown
}