我们正在将应用程序从WAS 6.1迁移到Liberty。我们的应用程序使用通过InputStream is = ClassLoader.getSystemResource("myproperty.properties")
读取属性文件的第三方jar。
在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>
请告知我们是否还有其他方法可以在Liberty个人资料中覆盖/设置类路径?
答案 0 :(得分: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,安迪
答案 1 :(得分:2)
如果您的最终目标是加载属性文件,则更简单的方法是使用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