2017-01-07 8 views
0

Erzeugen ich dieses Beispiel lese, die zeigt mir, wie Slick-CodeGenKonfigurationsdatei lesen, während Slick-Code über SBT

https://github.com/slick/slick-codegen-example/blob/master/build.sbt

mit Quellcode zu generieren Und während diese Probe, gut ist, möchte ich ändern es so, dass es die Datenbankkonfiguration aus der application.conf mit typesafe config liest.

Andernfalls muss ich die Datenbankverbindungskonfiguration hier und auch in der application.conf-Datei replizieren.

Weiß jemand, wie kann dieses Beispiel geändert werden, so dass wir die typsichere Konfiguration verwenden können, um die Konfigurationswerte aus der application.conf zu lesen?

Edit: Basierend auf dem Vorschlag unten, habe ich versucht, die folgenden

habe ich eine Datei build.sbt im Projektordner

libraryDependencies += "com.typesafe" % "config" % "1.3.1" 

geändert meine Haupt build.sbt Datei (im Projektstamm) genannt als

val slickVersion = "3.1.1" 

lazy val mainProject = Project(
    id = "FooBar", 
    base=file("."), 
    settings = Defaults.coreDefaultSettings ++ Seq(
     scalaVersion := "2.11.8", 
     libraryDependencies ++= Seq(
     "com.typesafe.slick" %% "slick" % slickVersion, 
     "com.typesafe.slick" %% "slick-codegen" % slickVersion, 
     "mysql" % "mysql-connector-java" % "5.1.35", 
     "com.typesafe" % "config" % "1.3.1" 
    ), 
     myConf := { 
     ConfigFactory.parseFile(new File("src/main/resources/application.conf")) 
     }, 
     slick <<= slickCodeGenTask, 
     sourceGenerators in Compile <+= slickCodeGenTask 
    ) 
) 

lazy val slick = TaskKey[Seq[File]]("gen-tables") 
lazy val myConf = settingKey[Config]("The application properties") 

lazy val slickCodeGenTask = (sourceManaged, dependencyClasspath in Compile, runner in Compile, streams) map {(dir, cp, r, s) => 
    val outputDir = (dir/"slick").getPath 
    val username = myConf.value.getString("mysql.username") 
    val password = myConf.value.getString("mysql.password") 
    val port = myConf.value.getInt("mysql.port") 
    val db = myConf.value.getString("mysql.db") 
    val server = myConf.value.getString("mysql.server") 
    val url = s"jdbc:mysql://$server:$port/$db?username=$username&password=$password" 
    val jdbcDriver = myConf.value.getString("mysql.jdbcDriver") 
    val slickDriver = myConf.value.getString("mysql.slickDriver") 
    val pkg = "sql" 
    val fname = outputDir + "/db/Tables.scala" 
    toError(r.run("slick.codegen.SourceCodeGenerator", cp.files, Array(slickDriver, jdbcDriver, url, outputDir, pkg), s.log)) 
    Seq(file(fname)) 
} 

Die Config- und ConfigFactory-Klassen können jedoch nicht aufgelöst werden.

+0

ist 'Import com.typesafe.config. {ConfigFactory, Config}' fehlt? – Sebastian

+0

Es hat funktioniert. Ich denke, nachdem Sie das Projekt/build.sbt erstellt haben, müssen Sie den Build einmal erfolgreich ausführen lassen und dann Ihre Änderungen vornehmen. –

Antwort

1

eine Abhängigkeit von Typesafe Config Deklarieren in project/build.sbt:

libraryDependencies += "com.typesafe" % "config" % "1.3.1" 

Und eine Einstellung Halten Sie Ihre Konfigurationsdatei in build.sbt definieren:

lazy val myConf = settingKey[Config]("The application properties") 

myConf := { 
    ConfigFactory.parseFile(new File("src/main/resources/application.conf")) 
} 

Jetzt können Sie myConf.value.getString("xyz") verwenden halten Sie Ihre Konfigurationswerte zu erhalten in anderen Aufgaben oder Einstellungen.

+0

Ich habe Ihren Vorschlag ausprobiert, aber SBT kann die Config- und ConfigFactory-Klassen nicht auflösen. Ich habe meine Frage mit aktualisiertem Code aktualisiert. –

Verwandte Themen