Я пытаюсь перезаписать конфигурацию Akka в своем приложении. Я создал дополнительную lib для приложения, у которого также есть файл application.conf, поскольку он использует Akka. Поэтому у меня есть 2 из них:Конфигурация Akka перезаписывается
application.conf in my lib:
my-conf {
something = 1
}
application.conf in my app, which uses the lib:
something-else = "foo"
my-conf {
something = 1000
}
Когда я бегу приложение от IntelliJ IDEA, все нормально, и Lib конфигурация перезаписи. Чтобы загрузить конфигурацию в моем приложении, я использую простое действие ConfigFactory.load()
. Но когда я создаю баночку моего приложения с mvn clean compile assembly:single
и попытаться запустить его с помощью этой команды: java -Xmx4048m -XX:MaxPermSize=512M -Xss256K -classpath myApp.jar com.myapp.example.MyMain
я получаю сообщение об ошибке:
Caused by: com.typesafe.config.ConfigException$Missing: No configuration setting found for key 'something-else'
Поэтому я решил переименовать файл конф в моем приложении и загрузить его в таком путь:
val defConfig = ConfigFactory load
val myConfig = ConfigFactory load "myconf"
val combined = myConfig.withFallback(defConfig)
val config = ConfigFactory load combined
Он находит отсутствующие настройки, но, к сожалению, конфигурация из моего приложения не переопределяет конфигурацию в моей библиотеке. В моей библиотеке я загружаю конфигурацию по-умолчанию: val settings = ConfigFactory load
Кроме того, «my-conf.something» является важной настройкой, и я бы хотел перезаписать ее из своего приложения.
Что я делаю неправильно? Заранее спасибо!
Кроме того, я думал, что может быть проблема, как я создаю банку:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.myapp.example.MyMain</mainClass>
</manifest>
</archive>
<finalName>loadtest</finalName>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>dist-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
Фрагмент, который вы показываете для загрузки своей конфигурации, выглядит странно: 'comb' должен быть тем, который вы хотите, для чего вы используете' config' для? –
В соответствии с примером документации Akka Configuration они используют 'complete' (' config' в моем случае) для сборки ActorSystem: '// помещаем результат между переопределениями // (системные реквизиты) и значения по умолчанию снова Конфигурация завершена = ConfigFactory.load (в сочетании); // создать ActorSystem ActorSystem системы = ActorSystem.create ("MyName", в комплекте); ' ссылка: http://doc.akka.io/docs/akka/snapshot/general/configuration.html – psisoyev
В вашей Например, это «сэндвич» уже произошло дважды. Повторная запись вашего сообщения предполагает, что вы фактически не используете конфигурацию, созданную, как показано выше, в вашей lib, поскольку вы говорите, что lib использует 'ConfigFactory.load()' внутренне; это будет вашей проблемой. –