2017-08-01 178 views
0

我們希望將.properties文件放在jar外面,以便我們可以更改模塊中使用的屬性,而不必重新安裝模塊。Java:如何將jar外的.properties文件包含到classpath中?

在Java 8之前,我們使用下面的方式運行腳本幷包含.properties文件,它工作正常。但是自從我們更新到Java 8以來,這種在classpath中包含.properties文件的方式不起作用,這意味着java程序無法找到.properties文件。

我的腳本運行Java項目:

/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 

我們使用自旋微觀語境拿起屬性文件是這樣的:

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

然後在屬性appilcation.properties文件正在使用(在許多不同的文件中):

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

尋找一種方法將jar文件和classpath中的.properties文件保存起來,以便Spring上下文找到該文件。

是他們使用其他方式嗎?我們需要保留從罐子排除的屬性文件

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

在此先感謝。

回答

-1

我找到了一個解決方法使得在腳本的變化通過運行程序使用「::」而不是「:」。

計上心來:

==>的java和javac的處理方式不同的類路徑設置, 的javac是對類的搜索/如果CLASSPATH包含雙類路徑分隔符(「:: 「在Unix下,」;;「在Windows下)。

從這個鏈接,這似乎令人信服和我的作品。請看看這裏: https://bugs.openjdk.java.net/browse/JDK-4809833

2

使用此,如果您使用的是基於XML配置

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

然後,它會加載來自任何地方,只要它是在類路徑不是在罐子的屬性。你必須把它列入類路徑爲$ CLASSPATH:application.properties中

對於基於註解,@PropertySource("classpath:application.properties") 這裏有一個樣本 Java: read properties file using spring annotations

相關問題