Slick 3.2 CodeGenerator Tool 在自动生成的代码中硬编码数据库名称
Slick 3.2 CodeGenerator Tool hardcodes the database name in the autogenerated code
我正在使用 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?我应该生成两次代码吗?
您可以根据需要自定义输出:
您正在查看的位置的默认值在 AbstractSourceCodeGenerator.scala
-> TableClassDef
特征中,在 code
方法中。
所以,假设你有一个 class
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"))}"""
}
}
}
在您的情况下,您可能希望变量 hereGoesTheDatabaseNameAndTheTableNameComaSeparated 从某些配置文件或环境变量中获取数据库名称,例如?
完全免责声明:我自己从未定制过这部分,但我看不出这是行不通的重要原因。
我正在使用 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?我应该生成两次代码吗?
您可以根据需要自定义输出:
您正在查看的位置的默认值在 AbstractSourceCodeGenerator.scala
-> TableClassDef
特征中,在 code
方法中。
所以,假设你有一个 class
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"))}"""
}
}
}
在您的情况下,您可能希望变量 hereGoesTheDatabaseNameAndTheTableNameComaSeparated 从某些配置文件或环境变量中获取数据库名称,例如?
完全免责声明:我自己从未定制过这部分,但我看不出这是行不通的重要原因。