知識庫 / Spring RSS 訂閱

Spring 屬性文件不在 JAR 包中

Spring
HongKong
5
01:27 PM · Dec 06 ,2025

1. 概述

屬性文件是一種常用的方法,我們可以用來存儲項目特定的信息。理想情況下,我們應該將其外部化,以便在需要時能夠靈活地修改配置。

在本快速教程中,我們將探討在 Spring Boot 應用程序中從位於 JAR 外的位置加載屬性文件的各種方法。

2. 使用默認位置

根據約定,Spring Boot 會在以下預定義位置查找外部化配置文件——<em><span><span><span>application</span><span>.</span><span>properties </span></span></span></em><span><span><span>或 <em>application.yml</em></span></span></span></span>:

以下是優先級順序:

  • 當前目錄的 <em>/config</em> 子目錄
  • 當前目錄
  • 類路徑下的 <em>/config</em>
  • 類路徑根目錄

因此,如果在 <em>/config</em> 子目錄中定義一個屬性並將其放置在當前目錄中,則該屬性將被加載。如果存在衝突,它將覆蓋類路徑中其他位置的屬性。

3. 使用命令行

如果上述約定對我們不起作用,我們可以在命令行中直接配置位置

java -jar app.jar --spring.config.location=file:///Users/home/config/jdbc.properties

我們還可以傳遞一個文件夾位置,應用程序將在此位置搜索文件:

java -jar app.jar --spring.config.name=application,jdbc --spring.config.location=file:///Users/home/config

最後,一種替代方法是使用 Maven 插件運行 Spring Boot 應用程序。

在那裏,我們可以使用一個 -D 參數:

mvn spring-boot:run -Dspring.config.location="file:///Users/home/jdbc.properties"

4. 使用環境變量

現在假設我們無法修改啓動命令。

很棒的是,Spring Boot 還會讀取環境變量 SPRING_CONFIG_NAMESPRING_CONFIG_LOCATION

export SPRING_CONFIG_NAME=application,jdbc
export SPRING_CONFIG_LOCATION=file:///Users/home/config
java -jar app.jar

請注意,默認文件仍將被加載。但是,特定環境的屬性文件在屬性衝突的情況下會優先使用

5. 使用應用程序屬性

正如我們所見,在應用程序啓動之前,必須定義 spring.config.namespring.config.location 屬性。因此,在 application.properties 文件(或 YAML 對文件)中使用它們將不會產生任何影響。

Spring Boot 修改了在 2.4.0 版本中屬性的處理方式。

同時,團隊引入了一個新的屬性,允許從應用程序屬性中直接導入額外的配置文件:

spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties

6. 通過編程方式

如果我們需要通過編程方式訪問,可以註冊一個 PropertySourcesPlaceholderConfigurer Bean:

public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer properties = 
      new PropertySourcesPlaceholderConfigurer();
    properties.setLocation(new FileSystemResource("/Users/home/conf.properties"));
    properties.setIgnoreResourceNotFound(false);
    return properties;
}

我們這裏使用了 PropertySourcesPlaceholderConfigurer 從自定義位置加載屬性。

7. 從胖文件中排除文件

Maven Boot 插件會自動將 src/main/resources 目錄中的所有文件包含到 jar 包中。

如果我們不想讓一個文件成為 jar 包的一部分,可以使用簡單的配置來排除它:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/conf.properties</exclude>
            </excludes>
        </resource>
    </resources>
</build>

在此示例中,我們已將 conf.properties 文件從生成的 jar 包中排除在外。

8. 結論

本文介紹了 Spring Boot 框架如何自動處理外部化配置,從而簡化了我們的工作。

通常,我們只需要將屬性值放置在正確的文件和位置即可。 此外,我們還可以使用 Spring 的 Java API 以獲得更大的控制權。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.