您好我有以下项目结构。
我想将我的属性文件存储在我的jar之外,这样如果我更改任何属性,它将自动反映出来。 我的属性文件包含其他服务器的ip,这可能会改变,所以我想把我的属性文件保存在我的jar之外。
我的resources
文件夹包含我的所有属性文件,包括application.propeties。
我正在使用以下代码段从我的属性文件中读取。
server_1 = new Properties();
server_1.load(PropertyReader.class.getClassLoader().getResourceAsStream("resources/server_1.properties"));
server_2 = new Properties();
server_2.load(PropertyReader.class.getClassLoader().getResourceAsStream("resources/server_2.properties"));
我也试过
server_2.load(PropertyReader.class.getClassLoader().getResourceAsStream("server_2.properties"));
server_2.load(PropertyReader.class.getClassLoader().getResourceAsStream("/server_2.properties"));
但它给了我以下错误:
Caused by: java.lang.NullPointerException: null
我已经浏览了this链接,这就是我在resources
级别创建src
文件夹的原因,但我仍然无法理解这种行为。
谢谢
答案 0 :(得分:0)
要继续我的评论,如果这是一个jar,你要在jar / bundle之外分隔资源,你需要jar的类路径中的resources文件夹。
对于我项目中的可执行jar,我通过maven-jar插件在jar的清单条目中添加了一个类路径条目(相对于jar的位置):
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>....</mainClass>
</manifest>
<manifestEntries>
<Class-Path>../resources/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
检查MANIFEST.MF文件以查找添加的条目。然后你可以直接在你的代码中使用(没有资源文件夹):
PropertyReader.class.getClassLoader().getResourceAsStream("server_1.properties");
对于您的单元测试,您可以直接在src / resources中提供。
<强>更新强>
注意到你提到它是一个弹簧启动应用程序。参考这一个。使用配置文件提及资源文件夹的位置。这样它就更整洁了。