2016-06-01 7 views
0

私はScala(2.11.7)でakkaストリーム(2.4.6)と滑らかな(3.1.1)を扱い始めました。私はIntellijを使用しています(問題があるかどうかわかりませんが、私はそこに投げ捨てると思っていました)。Scala - fromPublisherはオブジェクトakka.stream.scaladsl.Sourceのメンバーではありません

val scanner: DatabasePublisher[Stage] = db.stream(action.transactionally.withStatementParameters(fetchSize = 5000)) 
val source = Source.fromPublisher(scanner) 

問題は2行目にあります。 IntelliJは、私はそれがIJさfinnickyだと思った...それは記号「fromPublisher」を解決できないことを私に語っているが、私はビルドするために行ったとき、私はこれを得た:

Error:(38, 10) value fromPublisher is not a member of object akka.stream.scaladsl.Source 
    Source.fromPublisher(scanner) 
     ^

私が間違っていることができるものの任意のアイデア?

一晩中これと戦って、私は私の髪を引き出す準備ができています。

ありがとうございます!

+0

フルコードスニペットを表示できますか – Sky

答えて

1

実施例を参照してください:

import akka.actor.ActorSystem 
import akka.stream.ActorMaterializer 
import akka.stream.scaladsl.Source 
import slick.backend.DatabasePublisher 
import slick.driver.H2Driver.api._ 

import scala.concurrent.Await 
import scala.concurrent.duration._ 

case class Emp(id: Int, name: String) 

object Demo extends App { 

    implicit val system = ActorSystem("Sys") 

    val db = Database.forConfig("h2mem1") 

    val empTableQuery = TableQuery[EmployeeTable] 
    val insertQuery = empTableQuery ++= Seq(Emp(1, "emp1"), Emp(2, "emp2"), Emp(3, "emp3"), Emp(4, "emp4")) 
    val action = DBIO.seq(empTableQuery.schema.create, insertQuery) 

    //create schema and insert record 
    Await.result(db.run(action), 1000 second) 
    // print db record 
    Await.result(db.run(empTableQuery.result), 1000 second).foreach(println) 
    val publisher: DatabasePublisher[Emp] = db.stream(empTableQuery.result) 

    import system.dispatcher 

    implicit val materializer = ActorMaterializer() 

    //consume using stream 
    println("Steaming data::::::::") 
    val source = Source.fromPublisher(publisher).map(emp => emp.id + " : " + emp.name).runForeach(println) 

    class EmployeeTable(tag: Tag) extends Table[Emp](tag, "emp") { 
    val id = column[Int]("id", O.PrimaryKey) 
    val name = column[String]("name") 

    def * = (id, name) <>(Emp.tupled, Emp.unapply) 
    } 


    source.onComplete(_ => system.terminate()) 

} 

build.sbt

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "mysql" % "mysql-connector-java" % "5.1.36", 
    "com.typesafe.slick" %% "slick-hikaricp" % "3.1.1", 
    "ch.qos.logback" % "logback-classic" % "1.1.3", 
    "com.typesafe.slick" %% "slick" % "3.1.1", 
    "com.typesafe.akka" %% "akka-stream" % "2.4.6", 
    "org.scalatest" %% "scalatest" % "2.2.5" % "test", 
    "com.h2database" % "h2" % "1.4.187" 
) 

application.conf

h2mem1 = { 
    url = "jdbc:h2:mem:test1" 
    driver = org.h2.Driver 
    connectionPool = disabled 
    keepAliveConnection = true 
} 
0

は私の質問に返信ありがとうございました。私は問題を発見した。コードではありませんでした。

問題はIntellijライブラリのセットアップにありました。

私はSBTでプロジェクトをコンパイルしましたが、IJがその上に投げ込んでいたにもかかわらず、うまくいきました。

私は周りを突き刺した後、私はProject Structure - > SDKに入って、SDKライブラリ、akka-stream-experimental 1.0 jar、および他の迷惑メールに気付きました。

これらを削除しました(JDK 8のJARを残しました)。そして今、すべてが機能します!

ありがとうございました!

関連する問題