2016-12-04 110 views
1

我试图使用PlaySlick配置两个数据库,记录为here。在下面的代码中的问题是,即使我配置了第二个数据库db2任何使用它的尝试都会将动作重定向到db1(尝试在db1中查找表并引发SQL异常,表示未找到该表)。使用注入在PlaySlick中配置两个数据库

如何在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

首先,我不认为这是有道理的延长HasDatabaseConfigProvider(有帮助,虽然只非常少,单个数据库配置;你手动获得数据库)。

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

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

你可以仔细检查一下,如果在db中有这个表(例如用db命令行)?

+0

PlaySlick示例应用程序扩展了'HasDatabaseConfigProvider',有什么选择? – ps0604

+0

但是这个特质并没有给出任何基本的东西。看看源代码。它的作用基本上为你提供:'覆盖最终保护的val dbConfig:DatabaseConfig [P] = dbConfigProvider.get [P]'(你已经在这一行做过:'val db1 = dbConfigProvider.get [JdbcProfile] .db' )。 所以答案是 - 当你使用一个数据库时,它可以节省1或2行。在你的情况下,你已经创建了这条线,所以没有其他选择需要(不需要扩展任何东西)。 但我们不同意这个问题(我怀疑它是相关的)。你确定你在数据库中需要表吗? –

+0

我只是再次测试这个,它运作良好,你是对的 – ps0604

相关问题