#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:
Я не совсем уверен, каковы ваши ограничения, но в принципе у вас есть несколько вариантов:
-
Вы можете предоставить жестко запрограммированную конфигурацию вашей системе-субъекту при ее создании, например:
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);
-
вы можете загрузить пользовательский конфигурационный файл вместо
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"
-
Вы также можете указать пользовательский порт и 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}"
-
Или вы можете включить
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»? правильно?