2017-08-01 174 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

相关问题