2017-09-12 1 views
2

Scala 2.11.8에서 Slick 3.1.0을 사용하고 있습니다. 이것은 매끄러운 확장을 사용하여 Oracle 데이터베이스를 쿼리합니다. Oracle Slick 드라이버는 스트리밍을 지원합니까?

나는 그것의 전체 결과를 읽는 것을 의미하는 것 같다 아무것도 인쇄하지 않고이 코드를 실행하면

type MyTup = (String, String, String) 
implicit val actorSystem = ActorSystem() 
implicit val materializer = ActorMaterializer() 
val db = Database.forConfig("oracle") 
val query = sql"""select col1, col2, col3 from FOO.BAR""".as[MyTup] 
val source = Source.fromPublisher[MyTup](db.stream(query)) 
val sink = Sink.foreach[MyTup](row => println(row)) 
val flow = source to sink 
flow.run() 
readLine() 
db.close() 

는,이 코드는 아주 긴 시간 동안 실행에 다음 코드를 .... 썼다 인쇄하기 전에 (그래서 스트리밍하지 않음).

나는 MySQL을 스트리밍 수행하고 나는 그것이

https://github.com/slick/slick/issues/1218

오라클은 또한 MySQL은 같은 몇 가지 특별한 구성이 필요합니까 스트리밍 수 있도록 특별한 구성이 필요하다는 것을 알고?

내 build.sbt

libraryDependencies ++= Seq(
    "com.typesafe.slick" % "slick-extensions_2.11" % "3.1.0", 
    "com.typesafe.slick" % "slick_2.11" % "3.1.0", 
    "com.typesafe.slick" % "slick-codegen_2.11" % "3.1.0", 
    "oracle" % "ojdbc7_2.11" % "7.0.0", 
    "com.typesafe.slick" % "slick-hikaricp_2.11" % "3.1.0", 
    "com.typesafe.akka" % "akka-stream_2.11" % "2.5.4" 
) 

답변

0

확인을 클릭합니다. 나는 그 해답을 발견했다. 예 Oracle 드라이버는 스트리밍을 지원하며 mysql과 같은 추가 구성은 필요하지 않습니다.

은 여기 내 application.conf

oracle { 
    driver = "slick.jdbc.OracleProfile$" 
    dataSourceClass = "slick.jdbc.DatabaseUrlDataSource" 
    properties { 
    driver = "oracle.jdbc.OracleDriver" 
    url = "jdbc:oracle:thin:user/[email protected]//server:1521/serviceName" 
    } 
    numThreads = 10 
    connectionTimeout = 10000 
} 

내 build.sbt가 사용되지 않습니다 때문에 나는 매끄러운 확장을 사용하고 있지 않다

"com.typesafe.slick" %% "slick" % "3.2.1", 
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.1", 
"oracle" % "ojdbc7_2.11" % "7.0.0", 
"com.typesafe.akka" %% "akka-stream" % "2.5.4" 

주입니다. 새로운 Oracle 드라이버 (OracleProfile)는 매끄러운 코어 릴리스 자체 내에 있습니다.

여기서 속이는 것은 "oracle" % "ojdbc7_2.11" % "7.0.0" 항목이 위조 된 것입니다. 항아리를 다운로드하고 로컬 sbt에서 이렇게 게시했기 때문입니다.

지금이 내 코드 (신탁 SBT/받는다는 종속성과 같은 오라클 드라이버를 제공하지 않습니다) 그리고 멋지고 데이터 스트림 :

implicit val actorSystem = ActorSystem() 
implicit val actorMaterializer = ActorMaterializer() 
val db = Database.forConfig("oracle") 
val query = sql"select member_id from foo".as[Long] 
val publisher = db.stream(query) 
val source = Source.fromPublisher[Long](publisher) 
val sink = Sink.foreach[Long](x => println(x)) 
val graph = RunnableGraph.fromGraph(GraphDSL.create(sink){implicit builder => s => 
    import GraphDSL.Implicits._ 
    source ~> s.in 
    ClosedShape 
}) 
val future = graph.run() 
Await.result(future, Duration.Inf) 
db.close() 
관련 문제