【问题标题】:Spring boot reading properties file returns nullSpring Boot 读取属性文件返回 null
【发布时间】:2018-10-16 21:00:42
【问题描述】:

您好,我有以下项目结构。

我想将我的属性文件存储在我的 jar 之外,这样如果我更改任何属性,它将自动反映。 我的属性文件包含其他服务器的 ip,它可能会改变,所以这就是为什么我想将我的属性文件保留在我的 jar 之外。

我的 resources 文件夹包含我的所有属性文件,包括 application.propeties。

我正在使用以下 sn-p 从我的属性文件中读取数据。

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 链接,所以我在src 级别创建了resources 文件夹,但我仍然无法理解这种行为。

谢谢

【问题讨论】:

  • 您对具有绝对路径的文章感到困惑。您的代码所做的是检查类路径中的资源文件夹。但是你的文件夹在你的类路径之外。
  • 能否请您详细说明一下,如果问题出在类路径上,如何解决。
  • 添加了一个答案,因为它包含一些代码。看看是否有帮助。请注意,我给出的属性路径取决于您的部署结构,并根据您的需要添加类路径条目。类路径条目是相对于 jar 的位置。
  • 刚刚注意到这是一个spring boot项目。我已经更新了答案。将资源文件夹作为属性提及并在应用程序中引用它是一种简洁的方法。

标签: java spring spring-boot properties configuration


【解决方案1】:

继续我的评论,如果这是一个你在 jar/bundle 之外分离资源的 jar,你需要 jar 的类路径中的资源文件夹。

对于我项目中的可执行 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 应用程序。参考这个。使用配置文件提及资源文件夹的位置。这样更整洁。

Spring Boot Reading Properties Files Based on classpath arg

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 2020-02-14
    • 1970-01-01
    • 2021-11-22
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2015-08-10
    相关资源
    最近更新 更多