[英]how to use Spring Boot profiles
我有application.yml
、 application-dev.yml
和application-dev.yml
mvn spring-boot:run -Dspring.profiles.active=dev
它不起作用,我無法使用mvn spring-boot:run
選擇開發配置文件。 我該如何選擇?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.run
, run.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.yml
和application-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>
或者,可以通過添加以下行在 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.