簡體   English   中英

Play Framework 2.1:在全局設置中以編程方式覆蓋配置文件

[英]Play Framework 2.1: Overriding configuration file programmatically in Global settings

我正在開發一個多租戶Play Framework 2.1應用程序。 我打算覆蓋GlobalSettings類的onRequest方法,以基於請求的子域加載和設置自定義配置。 問題是,我看不到在Play 2.x中怎么可能。

啟動服務器時,我可以在命令行上覆蓋系統屬性,但是如何為每個請求以Java代碼編程方式執行此操作?

代碼看起來像這樣(我假設):

@Override
public play.mvc.Action onRequest(Request request, Method actionMethod) {
    //Look up configuration settings in Cache based on request subdomain
    //(i.e. Cache.get("subdomain.conf"))
    //if not in cache: 
           //load appropriate configuration file for this subdomain (java.io.File)
           //set new configuration from file for this request
           //cache the configuration for future use in a new thread
   //else
           //set configuration from cache for this request
   return super.onRequest(request, actionMethod);
  }

}

查找URL和獲取/設置緩存很容易,但是我無法弄清楚如何以編程方式為Play Framework 2.1設置新配置,並且文檔對此類情況略有了解。

有什么想法嗎? 有人知道更好,更有效的方法嗎?

因此,以一種回旋的方式,我使用Scala Global為多租戶Play應用程序創建了基礎。 可能有一種使用過濾器實現此效果的更有效方法,但我發現到目前為止,它似乎仍然有效。 在Java中,這似乎不太容易實現。

我使用數據庫,而不是使用配置文件。 我認為使用鍵值緩存會更加高效,但這似乎現在可行。

在Global.scala中:

object Global extends GlobalSettings {

  override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    if (request.session.get("site").isEmpty){
      val id = models.Site.getSiteIDFromURL(request.host)
      request.session.+("site" -> id)
    }
    super.onRouteRequest(request)
  }

}

然后,顯然,您必須創建一個數據庫模型來基於請求域和/或請求中設置的會話值來查詢站點。 如果有人知道更好的方法,我很想聽聽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM