4

我们正在将我们的应用程序从 WAS 6.1 迁移到 Liberty。我们的应用程序使用第三方 jars 来读取属性文件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\\

方法二:在 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 配置文件中覆盖/设置类路径?

4

2 回答 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,安迪

于 2018-07-09T15:55:31.613 回答
2

如果您的最终目标是加载属性文件,更直接的方法是使用 bootstrap/env/system 属性或<jndiEntry>在 server.xml 中存储属性文件的位置,然后加载它。例如,使用环境变量:

(在 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");

关于管理配置的主题,请查看<feature>microProfile-1.2</feature>您可能会发现有用的 MicroProfile Config(例如 ):
使用 Liberty 配置微服务

于 2018-07-08T21:58:29.463 回答