2015-09-20 59 views
1

我有一個Play框架應用程序在斯卡拉。它使用數據庫,我需要在第一次應用程序啓動前將數據加載到數據庫中。我想我可以在應用程序中添加一個主類的類,並像play -main loadDataClass那樣啓動它。它似乎工作,但一旦我訪問Play.current.configuration我需要這個來訪問數據庫憑證。我得到這個錯誤:玩框架和小應用程序

Exception in thread "main" java.lang.RuntimeException: There is no started application

請指教如何實現這一點。我應該以何種方式啓動應用程序?

回答

0

您需要創建一個用於在啓動時加載數據的模塊。在生產模式下(激活器啓動),它將在應用程序啓動後以開發模式運行(激活器運行),它將在首次請求服務器之後運行。

的conf/application.conf創建模塊

app/modules/PrepareDatabaseModule.scala: 

該模塊

package modules 

import com.google.inject.AbstractModule 

trait PrepareDatabase {} 

class PrepareDatabaseClass extends PrepareDatabase { 
    initialize() 
    def initialize() = { 
    // Load your data here 
    } 
} 

class PrepareDatabaseModule extends AbstractModule { 
    def configure() = { 
    bind(classOf[PrepareDatabase]) 
     .to(classOf[PrepareDatabaseClass]).asEagerSingleton 
    } 
} 

內:

play.modules.enabled += "modules.PrepareDatabaseModule" 
+0

我要調用的代碼是用我的應用程序之前。我想從命令行運行這個。這可能與播放或我應該爲此做一個分離的應用程序? – Skoky

+0

你的情景對我來說聽起來很奇怪。我會用main方法爲你創建一個特殊的簡單java應用程序,就像你描述的那樣,然後從shell腳本運行它然後運行play。我仍然相信你的任務可以通過播放插件來解決。 –