【问题标题】:Slick 3.2 CodeGenerator Tool hardcodes the database name in the autogenerated codeSlick 3.2 CodeGenerator 工具在自动生成的代码中硬编码数据库名称
【发布时间】:2017-08-24 22:40:32
【问题描述】:

我正在使用 slick 3.2 代码生成工具,并针对我的生产数据库自动生成代码。在生成的代码中我可以看到

class BarActivity(_tableTag: Tag) extends profile.api.Table[BarActivityRow](_tableTag, Some("foo_prod"), "bar_activity") {

这里的 foo_prod 是代码生成器运行的数据库。

问题在于,对于多个环境,我的数据库名称不同。所以 dev 数据库是 foo_dev,qa 数据库是 foo_qa。

我不想在每次切换环境时都生成数据库文件。我想跨环境使用相同的生成代码。

我认为 slick 应该允许我们从连接属性中指定数据库名称。

那么使用自动生成的代码,我该如何编写一个有两个连接的问题。一是从 prod 读取数据,二是向 dev 写入数据?我应该生成两次代码吗?

【问题讨论】:

    标签: scala slick slick-3.0


    【解决方案1】:

    您可以根据需要自定义输出: 您正在查看的位置的默认值在 AbstractSourceCodeGenerator.scala -> TableClassDef trait 中,在 code 方法中。

    所以,假设你有一个像 class MyGenerator extends SourceCodeGenerator(model) { 你可以加进去

    override def Table = new Table(_) {
      override def TableClass = new TableClassDef {
        override def code =  {
           val prns = parents.map(" with " + _).mkString("")
           s"""class $name(_tableTag: Tag) extends profile.api.Table[$elementType](_tableTag, ${hereGoesTheDatabaseNameAndTheTableNameComaSeparated})$prns {
      ${indent(body.map(_.mkString("\n")).mkString("\n\n"))}"""
             }
          }
        }
    

    在您的情况下,您可能希望这里的变量GoesTheDatabaseNameAndTheTableNameComaSeparated 从某个配置文件或环境变量中获取数据库名称?

    完全免责声明:我自己从未定制过这部分,但我看不出这不起作用的主要原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2011-12-25
      • 2019-07-06
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      相关资源
      最近更新 更多