WAS Liberty 配置文件 - 使用 ClassLoader.getSystemResourceAsStream 阅读 属性
WAS Liberty profile - Read property using ClassLoader.getSystemResourceAsStream
我们正在将我们的应用程序从 WAS 6.1 迁移到 Liberty。我们的应用程序使用第三方 jar,它们通过 InputStream is = ClassLoader.getSystemResource("myproperty.properties")
读取 属性 个文件。
在 WAS 6.1 中,我们将服务器类路径设置为 myproperty.properties 的位置。我们尝试了以下方法在 Liberty 中设置类路径,但没有任何效果
方法 1:在 jvm.options 中设置以下内容(D:\ConfigFiles\DEV\ - 包含 myproperty.properties 的路径)
-Djava.class.path=D:\ConfigFiles\DEV\
方法 2:在 server.xml、
中设置类加载器
<library id="config">
<folder dir="${server.config.dir}/config/" includes="*.properties" scanInterval="5s"/>
</library>
<enterpriseApplication id="applicationEAR" location="application.ear" name="application">
<classloader privateLibraryRef="config"/>
</enterpriseApplication>
请告诉我们是否有任何其他方法可以 override/set Liberty 配置文件中的类路径?
如果您的最终目标是加载属性文件,更直接的方法是使用 bootstrap/env/system 属性 或 server.xml 中的 <jndiEntry>
来存储属性文件的位置,然后加载它。例如,使用环境变量:
(在 server.xml 文件中)
<server>
<featureManager>
<feature>jndi-1.0</feature>
...
</featureManager>
<jndiEntry jndiName="configDir" value="D:\ConfigFiles\Dev"/>
</server>
然后,您可以像这样在您的应用程序中加载资源:
@Resource(lookup = "configDir")
String configDir;
InputStream is = new FileInputStream(configDir + "/myproperty.properties");
或者,如果您始终将配置 属性 文件放在 ${server.config.dir}
下的某处,那么您可以利用 Liberty 中的内置 SERVER_CONFIG_DIR
环境变量:
String configDir = System.getenv("SERVER_CONFIG_DIR"); // equivalent to ${server.config.dir} in server.xml
InputStream is = new FileInputStream(configDir + "/myproperty.properties");
关于管理配置的主题,查看您可能会发现有用的 MicroProfile Config(例如 <feature>microProfile-1.2</feature>
):
Configuring microservices with Liberty
尝试在 jvm.options 中设置此 属性(而不是 -Djava.class.path=path/to/propertyDir
):
-Xbootclasspath/a:path/to/propertyDir
这会将 属性 目录(包含您的资源文件)的路径附加到 JVM 的 bootstrap 类路径。因为这是一个追加,它应该也适用于 Java 9+(一些相关选项已在 Java 9 中删除)。
我怀疑 -Djava.class.path=...
不起作用的原因是 JVM 从 WLP 服务器脚本获取类路径 - 因此系统 属性 在服务器 JVM。
您也可以将属性文件放入 JVM 的 lib/ext
目录中,但我尚未对此进行测试。 -Xbootclasspath/a:path
方法适用于 Mac - 我认为它也适用于 Windows。
HTH,安迪
我们正在将我们的应用程序从 WAS 6.1 迁移到 Liberty。我们的应用程序使用第三方 jar,它们通过 InputStream is = ClassLoader.getSystemResource("myproperty.properties")
读取 属性 个文件。
在 WAS 6.1 中,我们将服务器类路径设置为 myproperty.properties 的位置。我们尝试了以下方法在 Liberty 中设置类路径,但没有任何效果
方法 1:在 jvm.options 中设置以下内容(D:\ConfigFiles\DEV\ - 包含 myproperty.properties 的路径)
-Djava.class.path=D:\ConfigFiles\DEV\
方法 2:在 server.xml、
中设置类加载器<library id="config">
<folder dir="${server.config.dir}/config/" includes="*.properties" scanInterval="5s"/>
</library>
<enterpriseApplication id="applicationEAR" location="application.ear" name="application">
<classloader privateLibraryRef="config"/>
</enterpriseApplication>
请告诉我们是否有任何其他方法可以 override/set Liberty 配置文件中的类路径?
如果您的最终目标是加载属性文件,更直接的方法是使用 bootstrap/env/system 属性 或 server.xml 中的 <jndiEntry>
来存储属性文件的位置,然后加载它。例如,使用环境变量:
(在 server.xml 文件中)
<server>
<featureManager>
<feature>jndi-1.0</feature>
...
</featureManager>
<jndiEntry jndiName="configDir" value="D:\ConfigFiles\Dev"/>
</server>
然后,您可以像这样在您的应用程序中加载资源:
@Resource(lookup = "configDir")
String configDir;
InputStream is = new FileInputStream(configDir + "/myproperty.properties");
或者,如果您始终将配置 属性 文件放在 ${server.config.dir}
下的某处,那么您可以利用 Liberty 中的内置 SERVER_CONFIG_DIR
环境变量:
String configDir = System.getenv("SERVER_CONFIG_DIR"); // equivalent to ${server.config.dir} in server.xml
InputStream is = new FileInputStream(configDir + "/myproperty.properties");
关于管理配置的主题,查看您可能会发现有用的 MicroProfile Config(例如 <feature>microProfile-1.2</feature>
):
Configuring microservices with Liberty
尝试在 jvm.options 中设置此 属性(而不是 -Djava.class.path=path/to/propertyDir
):
-Xbootclasspath/a:path/to/propertyDir
这会将 属性 目录(包含您的资源文件)的路径附加到 JVM 的 bootstrap 类路径。因为这是一个追加,它应该也适用于 Java 9+(一些相关选项已在 Java 9 中删除)。
我怀疑 -Djava.class.path=...
不起作用的原因是 JVM 从 WLP 服务器脚本获取类路径 - 因此系统 属性 在服务器 JVM。
您也可以将属性文件放入 JVM 的 lib/ext
目录中,但我尚未对此进行测试。 -Xbootclasspath/a:path
方法适用于 Mac - 我认为它也适用于 Windows。
HTH,安迪