繁体   English   中英

System.exit在“ sbt运行”中工作,但不在.jar中

[英]System.exit working in “sbt run” but not in .jar

关闭我的程序时,我需要让我的akka​​演员在关闭之前完成他们正在做的事情,所以我有一个关闭钩子:

sys.addShutdownHook(
    {
      log.info("\n shutting down startWorkScheduler\n")
      assignWorkScheduler.cancel()
      log.info("\ntelling manager to shutdown gracefully\n")
      manager ! Manager.ShutdownGracefully
      //spam shutdown messages until we exit
      val resendShutDown = system.scheduler.schedule(5 seconds, 2 seconds){
        manager ! Manager.ShutdownGracefully
      }
      system.awaitTermination()
    }

在其他地方,我等待“一切正常,您可以关机”消息:

case Terminated(httpDlrSqlRouter) => {
      println("received terminated message from http router")
      if(shuttingDown) {
        println("httpDlrRouter done, shutting down......")
        log.info("httpDlrRouter done, shutting down......")
        context.system.shutdown()
        java.lang.System.exit(0)
      }else{
        log.warning("httpDlrRouter terminated, don't know why!")
      }
    }

当我使用sbt run运行代码时,它按预期sbt run :杀死或CTRL + c完成工作,打印“ httpDlrRouter完成,关闭...”并退出。

当我使用sbt assembly构建.jar并使用java -jar filename.jar运行它时, 实际退出外,它的作用相同,它一直挂着,直到我用kill -9杀死它为止

我需要System.exit任何替代方案或一些配置以使其正常工作吗?

明显改变

java.lang.System.exit(0)

Runtime.getRuntime().halt(0)

解决了问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM