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

Configuring two databases in PlaySlick using injection

我正尝试按照记录 here 使用 PlaySlick 配置两个数据库。下面代码中的问题是,即使我配置了第二个数据库 db2,任何使用它的尝试都会将操作重定向到 db1(尝试在 db1 中找到 table 并抛出一个 SQL 异常说明 table 未找到)。

如何使用注入在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"

首先,我认为扩展 HasDatabaseConfigProvider 没有意义(它对单个数据库配置有帮助,但作用很小;无论哪种方式,您都需要手动获取数据库)。

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

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

你能仔细检查一下你是否真的在数据库中有这个表(例如使用数据库命令行)吗?