OpenLiberty 无法注入环境变量
OpenLiberty can not inject environment variable
我正在尝试注入在 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]
显然我遗漏了一些东西,但无法弄清楚到底是什么。你能帮帮我吗?
正如下面答案中所建议的,我已经从 属性 名称中删除了 .
,但仍然得到相同的结果。
自由插件配置:
<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
句点不是环境变量中的有效字符。如果你在 server.env 中指定它应该工作:
server_property=server-env-property
MicroProfile 配置规范会自动将 ConfigProperty
注释中的句点转换为 _
以供查找。
环境变量通常不允许使用句点 - 有关详细信息,请参阅 。但是你可以在环境变量中使用下划线。
MicroProfile Config 应该将环境变量中的下划线转换为句点 - 它还应该重新映射区分大小写。讨论映射 here。
所以,我的建议是尝试将 server.env 中的 server.property=server-env-property
更改为 server_property=server-env-property
或 SERVER_PROPERTY=server-env-property
,看看是否可行。
更新:主要问题是为 Liberty 服务器 运行 所在的环境定义环境变量的方式。
当使用 server
命令到 start/run 服务器时,它将读取服务器的 server.env 文件并为服务器设置这些环境变量(除了已经存在的任何环境变量之外)定义在 shell).
使用java -jar server.jar
方式时,不会读取server.env文件,而是读取shell上定义的环境变量。使用此方法时,用户应显式设置环境变量(即 export MY_VAR=MyValue
)或应使用 shell 特定命令读取 server.env 文件(即 . server.env
, env X=Y
,等等)。
希望对您有所帮助!
我正在尝试注入在 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]
显然我遗漏了一些东西,但无法弄清楚到底是什么。你能帮帮我吗?
正如下面答案中所建议的,我已经从 属性 名称中删除了 .
,但仍然得到相同的结果。
自由插件配置:
<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
句点不是环境变量中的有效字符。如果你在 server.env 中指定它应该工作:
server_property=server-env-property
MicroProfile 配置规范会自动将 ConfigProperty
注释中的句点转换为 _
以供查找。
环境变量通常不允许使用句点 - 有关详细信息,请参阅
MicroProfile Config 应该将环境变量中的下划线转换为句点 - 它还应该重新映射区分大小写。讨论映射 here。
所以,我的建议是尝试将 server.env 中的 server.property=server-env-property
更改为 server_property=server-env-property
或 SERVER_PROPERTY=server-env-property
,看看是否可行。
更新:主要问题是为 Liberty 服务器 运行 所在的环境定义环境变量的方式。
当使用 server
命令到 start/run 服务器时,它将读取服务器的 server.env 文件并为服务器设置这些环境变量(除了已经存在的任何环境变量之外)定义在 shell).
使用java -jar server.jar
方式时,不会读取server.env文件,而是读取shell上定义的环境变量。使用此方法时,用户应显式设置环境变量(即 export MY_VAR=MyValue
)或应使用 shell 特定命令读取 server.env 文件(即 . server.env
, env X=Y
,等等)。
希望对您有所帮助!