elasticsearch,elastic4s,Scala,elasticsearch,Elastic4s" /> elasticsearch,elastic4s,Scala,elasticsearch,Elastic4s" />

Scala 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

我尝试运行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/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
}