WAS Liberty配置文件 - 使用ClassLoader.getSystemResourceAsStream读取属性

问题描述 投票:3回答:2

我们正在将我们的应用程序从WAS 6.1迁移到Liberty。我们的应用程序使用第三方jar,通过InputStream is = ClassLoader.getSystemResource("myproperty.properties")读取属性文件。在WAS 6.1中,我们将服务器类路径设置为myproperty.properties的位置。我们尝试了以下方法在Liberty中设置classpath,但没有任何效果

方法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>

如果在Liberty配置文件中有任何其他方法可以覆盖/设置类路径,请告诉我们?

java classpath websphere-liberty open-liberty
2个回答
3
投票

尝试在jvm.options(而不是-Djava.class.path=path/to/propertyDir)中设置此属性:

-Xbootclasspath/a:path/to/propertyDir

这会将属性目录(包含您的资源文件)的路径附加到JVM的引导类路径。因为这是一个附加,它也应该在Java 9+中工作(Java 9中已经删除了一些相关的选项)。

我怀疑-Djava.class.path=...不起作用的原因是JVM从WLP服务器脚本获取类路径 - 因此系统属性实际上在服务器JVM启动时应用太晚。

您也可以将属性文件放在JVM的lib/ext目录中,但我还没有测试过。 -Xbootclasspath/a:path方法适用于Mac - 我认为它也适用于Windows。

HTH,安迪


2
投票

如果您的最终目标是加载属性文件,更简单的方法是在server.xml中使用bootstrap / env / system属性或<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配置(例如<feature>microProfile-1.2</feature>): Configuring microservices with Liberty

© www.soinside.com 2019 - 2024. All rights reserved.