2017-08-01 39 views
0

モジュール内で使用されるプロパティを変更できるように、.propertiesファイルをjarファイルから削除して、モジュールを再インストールする必要はありません。Java:jarの外にある.propertiesファイルをクラスパスに含めるには?

Java 8以前では、スクリプトを実行して、.propertiesファイルを下の方に含めて使用していました。しかし、Java 8に更新したとき、クラスパスに.propertiesファイルを含めるこの方法は機能しません。つまり、javaプログラムは.propertiesファイルを見つけられません。

/usr/java/latest/bin/java -d64 -Xms1G -Xmx16G -XX:MaxPermSize=128m -XX:-UseGCOverheadLimit -cp "/online/sand/lib/client-api-1.0.0.jar:/online/sand/oap_pub/lib/*:/online/sand/oap/oap_dw/run/client_api/application.properties" team.online.client.api.MasterProcessor | tee -a client_api.log 

我々は性質がこのようにファイルをピックアップするSPINGコンテキストを使用している:次に

<util:properties id="app_props" 
       location="classpath*:/application.properties" /> 

そのappilcation.properties内のプロパティJavaプロジェクトを実行するために

マイスクリプトファイルは(多くの異なるファイルで)この方法で使用されています。

@Value("#{app_props[\"SERVICE_PATH_GET_METADATA\"]?:''}") 
private String metadataServicePath; 

jarとクラスパスから.propertiesファイルを外して、Springコンテキストがそのファイルを見つけるようにする方法を探しています。

これ以外の方法はありますか?私たちは、事前にjarファイルから

class.getClassLoader().getResourceAsStream("application.properties"); 

感謝を除外プロパティファイルを維持する必要があります。

答えて

-1

は私がしてプログラムを実行するスクリプトの変更を行う回避策を見つけました"::"の代わりに "::"を使用してください。

がアイデアを得た:

==>のjavaとjavacは、 のjavacがクラスを検索して別の方法でクラスパスの設定を処理している中/クラスパスは "(ダブルクラスパスの区切り文字が含まれている場合:: "、Unixでは" ;; ")。

私に納得しているように見えるこのリンクから、それが動作します。ここをクリックしてください: https://bugs.openjdk.java.net/browse/JDK-4809833

2

使用これは、XMLベースのコンフィグ

<context:property-placeholder location="classpath:application.properties"/> 

を使用している場合、それはどこにでもいる限り、それはクラスパスにないjarファイルにあるようにプロパティをロードします。あなたは$ CLASSPATHとしてクラスパスに含める必要があります:ベースの注釈についてはapplication.properties

@PropertySource("classpath:application.properties") サンプルはここにあります Java: read properties file using spring annotations

関連する問題