Spring引导读取属性文件返回null

时间:2018-05-07 05:41:55

标签: java spring spring-boot properties configuration

您好我有以下项目结构。

enter image description here

我想将我的属性文件存储在我的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文件夹的原因,但我仍然无法理解这种行为。

谢谢

1 个答案:

答案 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中提供。

<强>更新

注意到你提到它是一个弹簧启动应用程序。参考这一个。使用配置文件提及资源文件夹的位置。这样它就更整洁了。

Spring Boot Reading Properties Files Based on classpath arg