SpringBoot命令參數(shù)設(shè)置和獲取

一、定義

SpringBoot 中命令參數(shù)可以分為:SpringBoot特定的命令行參數(shù)和通用的JVM系統(tǒng)屬性

SpringBoot特定的命令行參數(shù)格式:--[參數(shù)名稱] ,放于jar包后面

通用的JVM系統(tǒng)屬性參數(shù)格式:-D[參數(shù)名稱] ,放于jar包前面

二、區(qū)別

--spring.profiles.active和-Dspring.profiles.active都是用于設(shè)置Spring Boot應(yīng)用程序的活動(dòng)配置文件的參數(shù),但它們?cè)谑褂梅绞胶妥饔梅秶嫌兴煌?br>

--spring.profiles.active是Spring Boot特定的命令行參數(shù),僅在啟動(dòng)Spring Boot應(yīng)用程序時(shí)生效,用于可以直接傳遞給SpringApplication的run方法在啟動(dòng)應(yīng)用程序時(shí)指定活動(dòng)配置文件。您可以通過在命令行中使用--spring.profiles.active=profile來設(shè)置它,其中profile是要激活的配置文件的名稱。例如:java -jar myapp.jar --spring.profiles.active=dev。這種方式適用于直接在命令行中指定活動(dòng)配置文件。

-Dspring.profiles.active這是一個(gè)系統(tǒng)屬性,可用于任何Java應(yīng)用程序,用于在應(yīng)用程序運(yùn)行時(shí)設(shè)置活動(dòng)配置文件。您可以在啟動(dòng)命令中使用-Dspring.profiles.active=profile來設(shè)置它,其中profile是要激活的配置文件的名稱。例如:java -jar -Dspring.profiles.active=dev myapp.jar。這種方式適用于在啟動(dòng)命令中設(shè)置系統(tǒng)屬性。

總之,--spring.profiles.active是Spring Boot特定的命令行參數(shù),用于設(shè)置活動(dòng)配置文件,而-Dspring.profiles.active是通用的JVM系統(tǒng)屬性,用于在運(yùn)行時(shí)設(shè)置活動(dòng)配置文件。您可以根據(jù)具體的使用場景選擇適合的方式來設(shè)置活動(dòng)配置文件。

三、數(shù)據(jù)獲取方式

3.1? 獲取`--spring.profiles.active`參數(shù)的值

在Spring Boot應(yīng)用程序中,可以通過多種方式獲取`--spring.profiles.active`參數(shù)的值:

1. 使用`Environment`對(duì)象:

可以通過`Environment`對(duì)象獲取活動(dòng)配置文件的值。在Spring Boot中,`Environment`是一個(gè)接口,它提供了訪問應(yīng)用程序?qū)傩院团渲玫姆椒ā?梢酝ㄟ^注入`Environment`對(duì)象來獲取活動(dòng)配置文件的值,如下所示:

```java

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.env.Environment;

import org.springframework.stereotype.Component;

@Component

public class MyComponent {

? ? @Autowired

? ? private Environment environment;

? ? public void printActiveProfile() {

? ? ? ? String activeProfile = environment.getProperty("spring.profiles.active");

? ? ? ? System.out.println("Active profile: " + activeProfile);

? ? }

}

```

在上面的示例中,通過注入`Environment`對(duì)象,可以使用`getProperty`方法獲取`spring.profiles.active`的值。

2. 使用`@Value`注解:

可以使用`@Value`注解將活動(dòng)配置文件的值直接注入到一個(gè)變量中,如下所示:

```java

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

@Component

public class MyComponent {

? ? @Value("${spring.profiles.active}")

? ? private String activeProfile;

? ? public void printActiveProfile() {

? ? ? ? System.out.println("Active profile: " + activeProfile);

? ? }

}

```

在上面的示例中,通過`@Value`注解將`${spring.profiles.active}`的值注入到`activeProfile`變量中。

3. 使用`@ConfigurationProperties`注解:

可以使用`@ConfigurationProperties`注解將活動(dòng)配置文件的值綁定到一個(gè)自定義的配置類中,如下所示:

```java

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.stereotype.Component;

@Component

@ConfigurationProperties(prefix = "spring.profiles")

public class MyConfig {

? ? private String active;

? ? public String getActive() {

? ? ? ? return active;

? ? }

? ? public void setActive(String active) {

? ? ? ? this.active = active;

? ? }

}

```

4、 使用`@Profile`注解:

可以在Spring組件(如Bean、配置類、方法)上使用`@Profile`注解來指定特定的活動(dòng)配置文件。當(dāng)應(yīng)用程序啟動(dòng)時(shí),Spring會(huì)根據(jù)`--spring.profiles.active`參數(shù)的值來選擇相應(yīng)的組件。例如:

```java

@Configuration

@Profile("dev")

public class DevConfiguration {

? ? // Configuration for dev profile

}

@Configuration

@Profile("prod")

public class ProdConfiguration {

? ? // Configuration for prod profile

}

```

在上述示例中,`DevConfiguration`類僅在`dev`配置文件激活時(shí)才會(huì)被加載,`ProdConfiguration`類僅在`prod`配置文件激活時(shí)才會(huì)被加載。

5. 使用`ApplicationContext`對(duì)象:

可以通過`ApplicationContext`對(duì)象獲取活動(dòng)配置文件的值。`ApplicationContext`是Spring應(yīng)用程序的核心接口,它提供了訪問應(yīng)用程序上下文的方法。可以通過注入`ApplicationContext`對(duì)象來獲取活動(dòng)配置文件的值,如下所示:

```java

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationContext;

import org.springframework.stereotype.Component;

@Component

public class MyComponent {

? ? @Autowired

? ? private ApplicationContext applicationContext;

? ? public void printActiveProfile() {

? ? ? ? String activeProfile = applicationContext.getEnvironment().getProperty("spring.profiles.active");

? ? ? ? System.out.println("Active profile: " + activeProfile);

? ? }

}

```

3.2? 獲取`-Dspring.profiles.active`參數(shù)的值

1、使用`System.getProperty()`方法獲取`-Dspring.profiles.active`參數(shù)值

示例代碼:

```java

public class MyApp {

? ? public static void main(String[] args) {

? ? ? ? String activeProfile = System.getProperty("spring.profiles.active");

? ? ? ? System.out.println("Active profile: " + activeProfile);

? ? }

}

```

2、使用`Environment`對(duì)象獲取`

在Spring Boot應(yīng)用程序中,可以通過依賴注入`Environment`對(duì)象,并使用`getProperty()`方法獲取活動(dòng)配置文件的值。

示例代碼:

```java

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.core.env.Environment;

import org.springframework.stereotype.Component;

@Component

public class MyComponent {

? ? @Autowired

? ? private Environment environment;

? ? public void printActiveProfile() {

? ? ? ? String activeProfile = environment.getProperty("spring.profiles.active");

? ? ? ? System.out.println("Active profile: " + activeProfile);

? ? }

}

```

3、System.getProperty()無法獲取值的原因

如果您使用`System.getProperty()`方法無法獲取`-Dspring.profiles.active`參數(shù)的值,可能有以下幾個(gè)原因:

1. 參數(shù)未正確設(shè)置:請(qǐng)確保在啟動(dòng)應(yīng)用程序時(shí)正確設(shè)置了`-Dspring.profiles.active`參數(shù)。您可以在命令行中使用類似于`java -jar myapp.jar -Dspring.profiles.active=dev`的方式設(shè)置參數(shù)。如果參數(shù)未正確設(shè)置,`System.getProperty()`方法將返回`null`。

2. 參數(shù)名稱錯(cuò)誤:請(qǐng)確保您在調(diào)用`System.getProperty()`方法時(shí)使用了正確的參數(shù)名稱。參數(shù)名稱應(yīng)該是`spring.profiles.active`,而不是`-Dspring.profiles.active`。在調(diào)用`System.getProperty()`方法時(shí),只需要傳遞參數(shù)名稱即可,不需要包含`-D`前綴。

3. 安全性限制:某些環(huán)境可能會(huì)限制應(yīng)用程序訪問系統(tǒng)屬性。例如,在某些安全配置下,應(yīng)用程序可能無法獲取系統(tǒng)屬性。請(qǐng)確保您的應(yīng)用程序在合適的環(huán)境下具有訪問系統(tǒng)屬性的權(quán)限。


注意:在命令行中,參數(shù)的順序很重要。-Dspring.profiles.active=dev應(yīng)該位于執(zhí)行JAR包的命令之前,而不是之后。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容