【问题标题】:OpenLiberty can not inject environment variableOpenLiberty 无法注入环境变量
【发布时间】:2019-09-23 15:12:37
【问题描述】:

我正在尝试注入在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

【问题讨论】:

  • 您可以将您的示例应用程序发布到 GitHub 吗?我想知道在服务器打包期间是否正在读取 env 变量,而不是在服务器运行时。
  • @AndyMcCright,请在此处找到 repo github.com/anton-balaniuc/config

标签: configuration open-liberty microprofile


【解决方案1】:

环境变量通常不允许使用句点 - 有关详细信息,请参阅 this post。但是你可以在环境变量中使用下划线。

MicroProfile Config 应该将环境变量中的下划线转换为句点 - 它还应该重新映射区分大小写。映射讨论here

所以,我的建议是尝试将 server.env 中的 server.property=server-env-property 更改为 server_property=server-env-propertySERVER_PROPERTY=server-env-property,看看是否可行。

更新:主要问题是为 Liberty 服务器运行的环境定义 env var 的方式。

当使用server 命令启动/运行服务器时,它会读取服务器的 server.env 文件并为服务器设置这些环境变量(除了已经在 shell 上定义的任何环境变量)。

当使用java -jar server.jar 方法时,它不会读取server.env 文件,而是读取shell 上定义的环境变量。使用此方法时,用户应明确设置环境变量(即export MY_VAR=MyValue)或使用特定于shell的命令读取server.env文件(即. server.envenv X=Y等)。

希望这会有所帮助!

【讨论】:

  • 不幸的是它并没有解决问题。即使我使用server_property=server-env-property 或仅使用server=server-env-property,仍然会出现同样的错误。我猜在属性查找期间不需要该文件
  • 您是否也使用更新的属性名称更新了您的 @ConfigProperty 注释?此外,作为健全性检查,您可以尝试打印 System.getenv("server_property") 的结果以查看此问题是 server.env 设置变量,还是 MP Config 查找/读取属性的问题
  • @AndyGuibert 所以System.getenv("property") 返回null。我已将 server.env@ConfigProperty(name = "property") 中的名称从 server.property 更改为 property
  • 有意思,你的 server.env 文件在哪里,用什么工具来启动 Liberty 服务器?
  • 查看target/liberty/wlp/user/servers/&lt;myServer&gt;/server.env,(默认:target/liberty/wlp/user/servers/defaultServer/server.env)。里面有什么?
【解决方案2】:

句点不是环境变量中的有效字符。如果你在 server.env 中指定它应该可以工作:

server_property=server-env-property

MicroProfile 配置规范会自动将ConfigProperty 注释中的句点转换为_ 以供查找。

【讨论】:

  • 不幸的是它并没有解决问题。即使我使用server_property=server-env-property 或仅使用server=server-env-property,仍然会出现同样的错误。我猜在属性查找期间不需要该文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 2016-01-19
  • 1970-01-01
相关资源
最近更新 更多