[英]Scala and Slick: DatabaseConfigProvider in standalone application
我有一個Play 2.5.3應用程序,該應用程序使用Slick從DB讀取對象。 服務類以以下方式構建:
class SomeModelRepo @Inject()(protected val dbConfigProvider: DatabaseConfigProvider) {
val dbConfig = dbConfigProvider.get[JdbcProfile]
import dbConfig.driver.api._
val db = dbConfig.db
...
現在,我需要一些獨立的Scala腳本在后台執行一些操作。 我需要連接到其中的數據庫,並且我想重用現有的服務類來從數據庫讀取對象。
要實例化SomeModelRepo類的對象,我需要傳遞一些DatabaseConfigProvider作為參數。 我試着跑:
object SomeParser extends App {
object testDbProvider extends DatabaseConfigProvider {
def get[P <: BasicProfile]: DatabaseConfig[P] = {
DatabaseConfigProvider.get("default")(Play.current)
}
}
...
val someRepo = new SomeModelRepo(testDbProvider)
但是我有一個錯誤:“(Play.current)”所在行中的“沒有啟動的應用程序”。 此外,不贊成使用對象Play中的current方法,應將其替換為DI。
有什么方法可以在獨立對象SomeParser中初始化SomeModelRepo類的對象?
最好的祝福
啟動Play應用程序時,PlaySlick模塊將為您處理Slick配置。 有了它,您有兩種選擇 :
DatabaseConfigProvider
並從那里獲取驅動程序,或者 DatabaseConfigProvider.get[JdbcProfile](Play.current)
進行全局查找,這不是首選方法。 無論哪種方式,您都必須運行Play應用! 由於獨立腳本不是這種情況,因此會出現錯誤:“沒有啟動的應用程序”。
因此,您將必須通過直接從config實例化db
來使用Slick的默認方法:
val db = Database.forConfig("default")
在Lightbend的模板上有很多示例。
編輯:對不起,我沒有閱讀整個問題。 您是否真的需要將其作為另一個應用程序? 您可以在應用啟動時運行后台操作,例如此處 。 在此示例中, InitialData
類被實例化為eager singleton ,因此它的insert()方法在應用程序啟動時立即運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.