Как ссылаться на значение .properties в application.conf

#java #akka #akka-remote-actor

#java #akka #akka-remote-actor

Вопрос:

У меня есть приложение J2EE, которое использует пользовательскую систему участников, и мне нужно реализовать некоторые пользовательские конфигурации.

Есть ли способ сделать это? Поскольку application.conf всегда есть путь к классу, я все равно могу загрузить внешний custom.properties файл и использовать его, как показано ниже

 ActorSystem.akka.remote.netty.hostname = "${custom.ip}"
ActorSystem.akka.remote.netty.port = "${custom.port}"
  

Ответ №1:

Я не совсем уверен, каковы ваши ограничения, но в принципе у вас есть несколько вариантов:

  1. Вы можете предоставить жестко запрограммированную конфигурацию вашей системе-субъекту при ее создании, например:

     Map configMap = new HashMap();
    configMap.put("akka.remote.netty.hostname", custom.ip);
    configMap.put("akka.remote.netty.port", custom.port);
    
    Config config = ConfigFactory.parseMap(configMap).withFallback(ConfigFactory.load());
    ActorSystem system = ActorSystem.create("ActorSystem", config);
      
  2. вы можете загрузить пользовательский конфигурационный файл вместо application.conf либо с помощью code: ConfigFactory.load("custom.conf") , либо установив системное свойство -Dconfig.resource=custom.conf и включив application.conf его в свой custom.conf , например:

     include "application"
    akka.remote.netty.hostname = "custom-ip"
    akka.remote.netty.port = "custom-port"
      
  3. Вы также можете указать пользовательский порт и IP-адрес через системные свойства и использовать значения по умолчанию, если они не определены. В этом случае application.conf это будет выглядеть так:

     akka.remote.netty.hostname = "default-ip"
    akka.remote.netty.port = "default-port"
    akka.remote.netty.hostname = "${?custom.ip}"
    akka.remote.netty.port = "${?custom.port}"
      
  4. Или вы можете включить custom.properties в свой application.conf файл. Если значение custom.properties не существует, оно будет автоматически игнорироваться. application.conf :

     akka.remote.netty.hostname = "default-ip"
    akka.remote.netty.port = "default-port"
    include "custom"
      

    custom.properties :

     akka.remote.netty.hostname = "custom-ip"
    akka.remote.netty.port = "custom-port"
      

Комментарии:

1. спасибо, что я хочу сделать, это загрузить эти переменные из переменных среды JNDI через java: comp / env?

2. Я бы предположил, что в этом случае вы могли бы пойти с альтернативой 1: прочитать их из JNDI и программно предоставить их вашей akka-системе.

3. @VolkerStampa и можете ли вы просто автоматически читать свойства из System.properties? как будто вы хотите сделать это вручную, вам нужно знать, какие свойства следует использовать из System.getProperty(); Я хотел бы использовать application.conf из jar и переопределить / добавить конфигурацию при запуске jar с приложением akka.

4. @kamiseq Не совсем уверен, что вы имеете в виду. Но разве альтернатива 3 не то, что вам нужно? Вы указываете значение по умолчанию в своем application.conf из jar, и вы можете переопределить эти значения по умолчанию с помощью определения системных свойств в командной строке.

5. @VolkerStampa привет, спасибо за ответ. итак, мне нужно изменить структуру application.cong (из дерева в список свойств), а затем, если какое-либо свойство будет добавлено в приложение с помощью -Dakka.remote.netty.hostname=other, akka будет использовать такое «другое» значение вместо «default-ip»? правильно?