首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过SBT生成光滑代码时读取配置文件

通过SBT生成光滑代码时读取配置文件
EN

Stack Overflow用户
提问于 2017-01-07 17:53:59
回答 1查看 350关注 0票数 1

我正在阅读这个示例,它向我展示了如何使用Slick-CodeGen生成源代码。

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

虽然这个示例很好,但我希望对它进行修改,以便它使用typesafe配置从application.conf读取数据库配置。

否则,我将不得不在这里以及application.conf文件中复制数据库连接配置。

有谁知道,如何修改这个示例,以便我们可以使用typesafe配置从application.conf读取配置值?

编辑:根据下面的建议,我尝试了以下几点

我在项目文件夹中创建了一个名为build.sbt的文件

代码语言:javascript
复制
libraryDependencies += "com.typesafe" % "config" % "1.3.1"

将我的主build.sbt文件(在项目根中)修改为

代码语言:javascript
复制
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))
}

但是它不能解析Config和ConfigFactory类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-07 18:42:33

project/build.sbt中声明对Typesafe Config的依赖

代码语言:javascript
复制
libraryDependencies += "com.typesafe" % "config" % "1.3.1"

并在build.sbt中定义保存配置文件的设置。

代码语言:javascript
复制
lazy val myConf = settingKey[Config]("The application properties")

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

现在您可以使用myConf.value.getString("xyz")来获取其他任务或设置中的配置值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41524603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档