2017-08-19 9 views
0

私はslick 3.2コード生成ツールを使用しています。生成されたコードでは、私は見ることができますSlick 3.2 CodeGeneratorツールは、自動生成されたコードのデータベース名をハードコードします

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

ここで、foo_prodは、コードジェネレータが実行されたデータベースです。

複数の環境では、データベースの名前が異なるという問題があります。 devデータベースはfoo_devで、qaデータベースはfoo_qaです。

私は毎回Iスイッチ環境でデータベースファイルを生成したくありません。私は同じ生成コードを環境間で使いたい。

私は、slickが接続プロパティからデータベース名を指定できるはずだと思います。

自動生成コードでは、2つの接続を持つ問題をどのように書きますか。 1つはprodからデータを読み取り、2つ目はdevにデータを書き込むか?コードを2回生成する必要がありますか?あなたが望むよう

答えて

1

あなたは出力をカスタマイズすることができます:あなたが見ている場所のデフォルト値はAbstractSourceCodeGenerator.scalaである - code方法では、>TableClassDefトレイト。だから、

、あなたはそれにあなたのケースで

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"))}""" 
     } 
     } 
    } 

を追加することができ、あなたには、いくつかの設定ファイルまたは環境変数からデータベース名を取得hereGoesTheDatabaseNameAndTheTableNameComaSeparated変数を持つようにしたいことがあり class MyGenerator extends SourceCodeGenerator(model) { のようなクラスを持っていると仮定例えば ​​?

完全免責事項:私はこの部分を自分自身でカスタマイズしたことはありませんが、これはうまくいかない大きな理由はありません。

関連する問題