4

アプリケーションを 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>

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 に答える