OpenLiberty не может внедрить переменную окружения - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь ввести свойство, которое определено в server.env.

 @Inject
 @ConfigProperty(name = "property")
 private String serverProperty;

содержимое server.env

property=server-env-property

Я добавил его внутрь pom.xml

<serverEnv>src/main/liberty/config/server.env</serverEnv>

Читается во время liberty-maven-plugin:2.2:package-server

 CWWKM2144I: Update server configuration file server.env from /Users/abalaniuc/code/config/src/main/liberty/config/server.env.

Однако, когда приложение выполняется, я получил эту ошибку:

 The property property was not found in the configuration.

Трассировка стека:

[ERROR   ] CWMCG5003E: The [BackedAnnotatedField] @Inject @ConfigProperty private com.microprofile.study.config.config.ConfigTestController.serverProperty InjectionPoint dependency was not resolved. Error: java.util.NoSuchElementException: CWMCG0015E: The property property was not found in the configuration.
        at com.ibm.ws.microprofile.config.impl.AbstractConfig.getValue(AbstractConfig.java:175)
        at [internal classes]

Очевидно, что я что-то упустил, но не могу понять, чтоименно так.Не могли бы вы помочь мне?

Как было предложено в ответах ниже, я удалил . из имени свойства, но все еще получаю тот же результат.

Настройка подключаемого модуля Liberty:

<plugin>
  <groupId>net.wasdev.wlp.maven.plugins</groupId>
  <artifactId>liberty-maven-plugin</artifactId>
  <version>${openliberty.maven.version}</version>
  <executions>
    <execution>
      <id>package-server</id>
      <phase>package</phase>
      <goals>
        <goal>create-server</goal>
        <goal>install-apps</goal>
        <goal>package-server</goal>
      </goals>
      <configuration>
        <outputDirectory>target/wlp-package</outputDirectory>
      </configuration>
    </execution>
  </executions>
  <configuration>
    <assemblyArtifact>
      <groupId>io.openliberty</groupId>
      <artifactId>openliberty-runtime</artifactId>
      <version>${openliberty.version}</version>
      <type>zip</type>
    </assemblyArtifact>
    <configFile>src/main/liberty/config/server.xml</configFile>
    <serverEnv>src/main/liberty/config/server.env</serverEnv>
    <bootstrapPropertiesFile>src/main/liberty/config/bootstrap.properties</bootstrapPropertiesFile>
    <appArchive>${project.build.directory}/${final.name}.war</appArchive>
    <packageFile>${project.build.directory}/${final.name}.jar</packageFile>
    <include>runnable</include>
    <serverName>${final.name}</serverName>
    <installAppPackages>project</installAppPackages>
  </configuration>
</plugin>

Для запуска приложения я делаю:

mvn clean package

java -jar target/config.jar

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Переменные среды обычно не допускают точек - см. этот пост для более подробной информации.Но вы можете использовать подчеркивания в переменных среды.

MicroProfile Config должен преобразовывать подчеркивания из переменных env в периоды - он также должен повторно отображать чувствительность к регистру.Сопоставление обсуждается здесь .

Итак, я предлагаю попробовать изменить server.property=server-env-property в server.env на server_property=server-env-property или SERVER_PROPERTY=server-env-property, чтобы посмотреть, работает ли это.

Надеюсь, это поможет!

2 голосов
/ 23 сентября 2019

Точка не является допустимым символом в переменной среды.Если вы укажете это в server.env, оно должно работать:

server_property=server-env-property

спецификация конфигурации MicroProfile автоматически преобразует период в аннотации ConfigProperty в _ для поиска.

...