2016-12-04 29 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