簡體   English   中英

如何使用 Spring Boot 配置文件

[英]how to use Spring Boot profiles

我有application.ymlapplication-dev.ymlapplication-dev.yml

  1. 我正在使用 maven 命令mvn spring-boot:run -Dspring.profiles.active=dev它不起作用,我無法使用mvn spring-boot:run選擇開發配置文件。 我該如何選擇?
  2. 文檔說java -jar XXX.jar --spring.profiles.active=dev有效,我嘗試了-Dspring.profiles.active=dev但它不起作用。 在我的項目中,我使用java -jar XXX.jar它運行,但是如果我使用java -jar XXX.jar --spring.profiles.active=dev來選擇開發配置文件,控制台會打印這么多日志並警告我從來沒有查看使用過的java -jar XXX.jar ,並告訴我APPLICATION FAILED TO START java -jar XXX.jar APPLICATION FAILED TO START

那么如何解決兩個問題呢? 謝謝~

我不確定我是否完全理解這個問題,但我會嘗試通過提供有關 Spring Boot 中的配置文件的一些詳細信息來回答。

對於 #1 示例,根據文檔,您可以使用 Spring Boot Maven 插件使用-Drun.profiles選擇配置文件。

編輯:對於 Spring Boot 2.0+, run已重命名為spring-boot.runrun.profiles已重命名為spring-boot.run.profiles

mvn spring-boot:run -Dspring-boot.run.profiles=dev

https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/maven-plugin/examples/run-profiles.html

從您的 #2 示例中,您正在 jar 名稱后定義活動配置文件。 您需要在運行的 jar 名稱之前提供 JVM 參數。

java -jar -Dspring.profiles.active=dev XXX.jar

一般信息:

您提到您同時擁有application.ymlapplication-dev.yml 使用dev配置文件運行實際上會加載兩個配置文件。 application-dev.yml的值將覆蓋application.yml提供的相同值,但將加載兩個yml文件中的值。

還有多種方法可以定義活動配置文件。

您可以在運行 jar 時使用-Dspring.profiles.active定義它們。 您還可以使用SPRING_PROFILES_ACTIVE環境變量或spring.profiles.active系統屬性設置配置文件。

更多信息可以在這里找到: https : //docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-set-active-spring-profiles

如果您使用的是 Spring Boot Maven 插件,請運行:

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

( https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html )

由於 Spring Boot v2+

我已經用 Spring Boot v2.3.5.RELEASE 驗證過

使用 Spring Boot Maven 插件

您可以提供這樣的命令行參數

mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev"

您可以像這樣提供JVM 參數

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"

java -jar

java -Dspring.profiles.active=dev -jar app.jar (VM 參數)

java -jar app.jar --spring.profiles.active=dev (程序參數)

2021 年 4 月首次更新

我不時地回到這個問題。 似乎這里發生了 Windows vs *nix 的事情。

建議使用mvn spring-boot:run -Dspring-boot.run.profiles=dev並且由於某種原因,這不適用於 Windows 7 終端(命令行提示符),至少對我來說不是。 我還沒有測試過 Windows 10 終端。 但是它確實適用於 Babun(已停產),但不適用於 Git-Bash。 還沒有測試過 Babun 和 Git-Bash 都建立在上面的 Cygwin。 Windows 10 和 Linux 上的 WSL 應該都可以正常工作。

2021 年 4 月第二次更新

我今天升級到使用 Spring Boot v2.4.5 后,問題似乎消失了。
mvn spring-boot:run -Dspring-boot.run.profiles=dev現在工作正常。

為此,您不需要三個 .yml 文件。 您可以擁有一個 application.yml 文件並在同一文件中寫入特定於配置文件的屬性,其中每個配置文件部分由 3 個連字符 (---) 分隔

接下來,為了選擇當前活動的配置文件,您也可以在 application.yml 文件中指定它,如下所示:

spring:
  profiles:
    active:
    - local

但是,如果您設置環境變量,則此配置將被覆蓋,例如:SPRING_PROFILES_ACTIVE = dev


這是您要求的示例文件:

# include common properties for every profile in this section

server.port: 5000 

spring:
  profiles:
    active:
    - local

---
# profile specific properties

spring:
  profiles: local

  datasource:
    url: jdbc:mysql://localhost:3306/
    username: root
    password: root

---
# profile specific properties

spring:
  profiles: dev

  datasource:
    url: jdbc:mysql://<dev db url>
    username: <username>
    password: <password>

如果您使用的是 maven,請在 pom.xml 中定義您的配置文件,如下所示

<profiles>
<profile>
    <id>local</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>
<profile>
    <id>dev</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
</profile>
<profile>
    <id>prod</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>

默認情況下,即如果未選擇配置文件,則將始終使用本地配置文件。

要在 Spring Boot 2.xx 中選擇特定的配置文件,請使用以下命令。

mvn spring-boot:run -Dspring-boot.run.profiles=dev

如果要使用特定配置文件的屬性構建/編譯,請使用以下命令。

mvn clean install -Pdev -DprofileIdEnabled=true

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

**來源- ** https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

基本上,當您的項目中存在多個 application-{environment}.properties 時需要它。 默認情況下,如果您在命令行中傳遞 -Drun.profiles 或 activeByDefault true 在

 <profile>
    <id>dev</id>
    <properties>
        <activatedProperties>dev</activatedProperties>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>

沒有像上面那樣定義的東西默認會選擇 application.properties 否則你需要通過附加 -Drun.profiles={dev/stage/prod} 來選擇。

TL; 博士

mvn spring-boot:run -Drun.profiles=dev

您可以根據指定在一個application.properties(陽明),如配置文件的屬性在這里 然后mvn clean spring-boot:run -Dspring.profiles.active=dev應該正確運行它。 它對我有用

在資源目錄中為運行應用程序所需的每個環境(例如:dev、qa、stg 等)創建特定的 .yml 文件。 資源目錄中 .yml 文件的圖像

如果您在 pom.xml 文件中使用 spring-boot-maven-plugin 2.0.5.RELEASE,則可以按如下方式在依賴項標記中添加配置文件。 pom.xml spring-boot-maven-plugin 的鏡像(您可以使用多個配置文件標簽配置多個配置文件)

然后就可以使用以下命令來構建和運行項目。

1) mvn clean install
2) mvn spring-boot:run -Dspring-boot.run.default==qa

然后您將看到在運行項目時默認配置文件設置為 qa。 運行應用程序時顯示默認配置文件

使用Intellij,因為我不知道如何將鍵盤快捷鍵設置為mvn spring-boot:run -Dspring.profiles.active=dev ,我必須這樣做:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <jvmArguments>
            -Dspring.profiles.active=dev
        </jvmArguments>
    </configuration>
</plugin>

如果您使用 maven,

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <profiles>
                        <profile>dev</profile>
                    </profiles>
                </configuration>
            </plugin>
        </plugins>
    </build>

這將開發設置為活動配置文件

./mvnw spring-boot:run

將 dev 作為活動配置文件。

@Profile 注釋允許您在一個或多個指定的配置文件處於活動狀態時指示組件有資格注冊。 使用上面的示例,我們可以按如下方式重寫 dataSource 配置:

@Configuration
@Profile("dev")
public class StandaloneDataConfig {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }
}

還有一個:

@Configuration
@Profile("production")
public class JndiDataConfig {

    @Bean(destroyMethod="")
    public DataSource dataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

在 Intellij IDEA 中使用“-Dspring-boot.run.profiles=foo,local”。 它正在工作。 它設置了 2 個配置文件“foo 和 local”。

使用引導版本“2.3.2.RELEASE”和 Intellij IDEA CE 2019.3 進行驗證。

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

使用“mvn spring-boot:run”設置配置文件在此處輸入圖片說明

設置環境變量在此處輸入圖片說明

或者,可以通過添加以下行在 application.properties 文件中直接指定配置文件:

spring.profiles.active=prod

配置文件與 Spring Boot 屬性文件一起工作。 默認情況下,Spring Boot 會解析一個名為 application.properties 的文件——位於 src/main/resources 目錄中——以識別配置信息。

我們的第一個任務是在該文件中添加一個參數,該參數將告訴 Spring 使用與活動配置文件(即應用程序當前正在運行的配置文件)相對應的不同環境特定屬性文件。 我們可以通過將以下內容添加到 application.properties 文件來做到這一點:

spring.profiles.active=@activatedProperties@

現在我們需要創建兩個新的特定於環境的屬性文件(在與現有 application.properties 文件相同的路徑中),一個由 DEV 配置文件使用,另一個由 PROD 配置文件使用。 這些文件需要命名如下:

應用程序-dev.properties

application-prod.properties

在每種情況下,我們都將 prod 指定為活動配置文件,這會導致選擇 application-prod.properties 文件進行配置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM