使用注入在PlaySlick中配置两个数据库

时间:2016-12-04 12:23:03

标签: playframework slick playframework-2.5 slick-3.0 play-slick

我正在尝试使用PlaySlick配置两个数据库,如文档here所示。下面代码中的问题是,即使我配置了第二个数据库db2,任何使用它的尝试都会将操作重定向到db1(尝试在db1中查找表并抛出一个SQL异常,说明找不到表格。

如何使用注入在PlaySlick中配置两个数据库?

这是我的尝试:

class ManageUsersDAO @Inject()(
    @NamedDatabase("db1") protected val dbConfigProvider: DatabaseConfigProvider,
    @NamedDatabase("db2") protected val dbConfigProvider2: DatabaseConfigProvider)
                               extends HasDatabaseConfigProvider[JdbcProfile] {
   import driver.api._

   val db1 = dbConfigProvider.get[JdbcProfile].db
   val db2 = dbConfigProvider2.get[JdbcProfile].db

和application.conf条目:

slick.dbs.db1.driver = "slick.driver.MySQLDriver$"
slick.dbs.db1.db.driver = "com.mysql.jdbc.Driver"
slick.dbs.db1.db.url = "jdbc:mysql://localhost:3306/db1"
slick.dbs.db1.db.user = "root"
slick.dbs.db1.db.password = "db1"

slick.dbs.db2.driver = "slick.driver.MySQLDriver$"
slick.dbs.db2.db.driver = "com.mysql.jdbc.Driver"
slick.dbs.db2.db.url = "jdbc:mysql://localhost:3306/db2"
slick.dbs.db2.db.user = "root"
slick.dbs.db2.db.password = "db2"

1 个答案:

答案 0 :(得分:1)

首先,我不认为扩展HasDatabaseConfigProvider是有意义的(它有助于,但只有很少,使用单个数据库配置;您可以手动获取数据库)。

除此之外 - 它看起来绝对不错。

我宁愿问一个愚蠢的问题 - 为什么你认为它首先连接到错误的数据库? 我的盲目猜测是你的演变可能有问题(这就是你在数据库中没有表格的原因)。

你能否仔细检查一下你是否在db中实际拥有这些表(例如使用db命令行)?