Play Framework 2.1: Программное переопределение файла конфигурации в глобальных настройках

Я работаю над разработкой мультитенантного приложения Play Framework 2.1. Я намерен переопределить метод onRequest класса GlobalSettings для загрузки и установки пользовательской конфигурации на основе поддомена запроса. Проблема в том, что я не понимаю, как это было бы возможно в 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, и документация немного освещает такие вещи.

Есть предположения? Кто-нибудь знает лучший, более эффективный способ сделать это?


person Michael Hawkins    schedule 26.03.2013    source источник
comment
Играть в! использует библиотеку конфигурации TypeSafe. Вы можете взглянуть на него (и, возможно, найдете то, что ищете): github.com/typesafehub/config< /а>   -  person Alban Dericbourg    schedule 31.03.2013
comment
Я посмотрю, спасибо.   -  person Michael Hawkins    schedule 04.04.2013


Ответы (1)


Таким образом, я создал основу для многопользовательского приложения Play, используя Scala Global. Может быть более эффективный способ реализовать это с помощью фильтра, но я считаю, что пока это работает. Это не так просто реализовать на 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)
  }

}

И затем, очевидно, вам нужно создать модель базы данных для запроса сайта на основе домена запроса и/или значения сеанса, установленного в запросе. Если кто-то знает лучший способ, я хотел бы услышать его.

person Michael Hawkins    schedule 04.10.2013
comment
К сожалению, я на собственном горьком опыте обнаружил, что это ДЕЙСТВИТЕЛЬНО читает базу данных при каждом запросе, но я не могу установить сеанс. См. новый вопрос: stackoverflow.com/questions/19235438/< /а> - person Michael Hawkins; 08.10.2013