나는이 응용 프로그램이 정확히 화면에 10 개의 행을 인쇄 예상 실행되는 Alpakka 카산드라 도서관왜 Akka Streams 응용 프로그램이 정상적으로 종료되지 않습니까?
package com.abhi
import akka.actor.ActorSystem
import akka.stream.{ActorMaterializer, ClosedShape}
import akka.stream.alpakka.cassandra.scaladsl.CassandraSource
import akka.stream.scaladsl.{Flow, GraphDSL, RunnableGraph, Sink}
import com.datastax.driver.core.{Cluster, Row, SimpleStatement}
import scala.concurrent.Await
import scala.concurrent.duration._
object MyApp extends App {
implicit val actorSystem = ActorSystem()
implicit val actorMaterializer = ActorMaterializer()
implicit val session = Cluster
.builder
.addContactPoints(List("localhost") :_*)
.withPort(9042)
.withCredentials("foo", "bar")
.build
.connect("foobar")
val stmt = new SimpleStatement("SELECT col1, col2 FROM foo").setFetchSize(20)
val source = CassandraSource(stmt)
val toFoo = Flow[Row].map(row => Foo(row.getLong(0), row.Long(1)))
val sink = Sink.foreach[Foo](foo => println(foo.col1, foo.col2))
val graph = RunnableGraph.fromGraph(GraphDSL.create(sink){ implicit b =>
s =>
import GraphDSL.Implicits._
source.take(10) ~> toFoo ~> s
ClosedShape
})
// let us run the graph
val future = graph.run()
import actorSystem.dispatcher
future.onComplete{_ =>
session.close()
Await.result(actorSystem.terminate(), Duration.Inf)
}
Await.result(future, Duration.Inf)
System.exit(0)
}
case class Foo(col1: Long, col2: Long)
를 사용하여이 간단한 응용 프로그램을 썼다.
하지만 게시 중단. System.exit(0)
호출이 실행될 때 예외를
Exception: sbt.TrapExitSecurityException thrown from the UncaughtExceptionHandler in thread "run-main-0"
을 던졌습니다하지만 여전히 응용 프로그램이 실행을 중지하지 않습니다. 그것은 단지 매달린다.
나는이 응용 프로그램 (사실조차하는 System.exit (0) 호출을 필요가 없습니다 정상적으로 종료되지 않는 이유를 이해하지 않습니다.
이 응용 프로그램을 종료 할 수있는 유일한 방법을 제어 C를 통해입니다 .