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.
ist 'Import com.typesafe.config. {ConfigFactory, Config}' fehlt? – Sebastian
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. –