自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring BOOT 啟動(dòng)參數(shù)

開發(fā) 架構(gòu)
在加載多個(gè)配置文件時(shí),如果有沖突的配置項(xiàng),后加載的配置文件中的配置項(xiàng)將覆蓋先加載的配置文件中的相同配置項(xiàng)。因此,在應(yīng)用程序中,應(yīng)該避免使用相同的配置項(xiàng)名來(lái)定義不同的配置值。

Spring BOOT 啟動(dòng)參數(shù)

在Java Web的開發(fā)完成后,以前我們都會(huì)打包成war文件,然后放大web容器,比如tomcat、jetty這樣的容器?,F(xiàn)在基于SpringBoot開發(fā)的項(xiàng)目,我們直接打包成jar文件,基于內(nèi)嵌的tomcat來(lái)實(shí)現(xiàn)一樣的效果。

而啟動(dòng)的方式變成了這樣:

java [ options ] -jar *.jar [ arguments ]

常見配置

我們常見的配置有:

  1. --server.port:指定應(yīng)用程序的端口號(hào)。
  2. --spring.profiles.active:設(shè)置應(yīng)用程序使用的配置文件中的環(huán)境配置。
  3. --spring.config.additional-location:指定額外的配置文件路徑。
  4. --Xms:設(shè)置JVM初始堆大小。
  5. --Xmx:設(shè)置JVM最大堆大小。
  6. --XX:PermSize:設(shè)置JVM永久代大小。
  7. --XX:MaxPermSize:設(shè)置JVM最大永久代大小。
  8. --Xdebug:開啟遠(yuǎn)程JDWP調(diào)試。
  9. -D:定義屬性。

options

在啟動(dòng)參數(shù)中,我們可以通過(guò)添加這樣的配置,來(lái)覆蓋系統(tǒng)屬性中的值:

java -Dfile.encoding=UTF-8 -jar app.jar

在代碼中可以通過(guò)這樣獲取該值:

String fileEncoding = System.getProperties("file.encoding"); //UTF-8

在很多項(xiàng)目中,都會(huì)基于*System.getProperties()*來(lái)控制代碼流程,這里要注意,通過(guò)啟動(dòng)參數(shù)配置的值優(yōu)先級(jí)會(huì)大于系統(tǒng)中的配置。同時(shí)注意改配置出現(xiàn)的位置,在上面使用了options位置來(lái)進(jìn)行區(qū)分。

arguments

在SpringBoot項(xiàng)目中,我們一般把配置都會(huì)寫在application.yml文件中,隨著項(xiàng)目一并打包到j(luò)ar文件中,在生產(chǎn)環(huán)境中, 啟動(dòng)項(xiàng)目時(shí)通過(guò)添加*--spring.config.location=/application.yml*來(lái)修改項(xiàng)目的配置文件指向,從而實(shí)現(xiàn)覆蓋application的效果。

同樣,我們可以通過(guò)配置啟動(dòng)參數(shù)來(lái)覆蓋application中的某個(gè)配置項(xiàng),比如:

java -Dfile.encoding=UTF-8 -jar app.jar --server.port=8080

可以在main方法的參數(shù)中獲取該值

log.info(">>>>> args: {}", Arrays.toString(args) );

參數(shù)的位置在上面對(duì)應(yīng)arguments位置。

優(yōu)先級(jí)

系統(tǒng)參數(shù)或環(huán)境變量:

  • 啟動(dòng)配置
  • set prop=value (export prop=value)
  • 系統(tǒng)中配置的參數(shù)或環(huán)境變量

Spring中的配置:

  • 啟動(dòng)參數(shù)
  • --spring.config.location=application.yml
  • classpath:application.yml

EnvironmentAware

在Spring中,提供了一個(gè)Aware接口EnvironmentAware,通過(guò)該接口我們可以很方便地獲取上面說(shuō)的那些參數(shù),不用關(guān)心是系統(tǒng)屬性、環(huán)境變量還是main方法的args。

public class MyService implements ApplicationContextAware, EnvironmentAware {
    
    @Override
    public void setEnvironment(Environment environment) {
        // 可以讀取System properties|env 數(shù)據(jù);系統(tǒng)參數(shù)
        log.info(">>>>> 從系統(tǒng)屬性中取值: {}", environment.getProperty("file.encoding") );
    }
}

通過(guò)觀察SpringBoot啟動(dòng)流程中,其中在SpringApplication的run方法中,可以看到系統(tǒng)環(huán)境屬性加載過(guò)程

ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);

基于StandardEnvironment的擴(kuò)展。

public class StandardEnvironment extends AbstractEnvironment {
    
 public static final String SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME = "systemEnvironment";
    
 public static final String SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME = "systemProperties";
    
 @Override
 protected void customizePropertySources(MutablePropertySources propertySources) {
  propertySources.addLast(
    new PropertiesPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));
  propertySources.addLast(
    new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));
 }

}

我們看到的這樣的寫法其實(shí)就是基于SpEL對(duì)PropertySources的資源的解析:

@Value("#{systemProperties['file.encoding']}")
    private String fileEncoding;

    @Value("#{systemEnvironment['JAVA_HOME']}")
    private String javaHome;

讀取配置順序

  1. 默認(rèn)配置:Spring Boot 默認(rèn)提供了一些基本的配置,如應(yīng)用程序的端口號(hào)、上下文路徑等。這些配置位于 SpringBoot jar 包中的默認(rèn)配置文件中。
  2. 用戶自定義配置:如果應(yīng)用程序中有自定義的配置文件,Spring Boot 會(huì)首先加載這些文件。用戶可以通過(guò)在應(yīng)用程序的 classpath 下放置一個(gè)名為 application.properties 或 application.yml 的文件來(lái)提供自定義配置。
  3. 命令行參數(shù):在啟動(dòng)應(yīng)用程序時(shí),可以通過(guò)命令行參數(shù)來(lái)傳遞配置。這些參數(shù)會(huì)被加載并覆蓋默認(rèn)配置和用戶自定義配置。
  4. 環(huán)境變量:環(huán)境變量也可以提供配置信息。如果應(yīng)用程序中定義了環(huán)境變量,它們將被加載并覆蓋默認(rèn)配置、用戶自定義配置和命令行參數(shù)。
  5. 系統(tǒng)屬性:系統(tǒng)屬性也可以提供配置信息。如果應(yīng)用程序中定義了系統(tǒng)屬性,它們將被加載并覆蓋默認(rèn)配置、用戶自定義配置、命令行參數(shù)和環(huán)境變量。

Springboot會(huì)先加載PropertiesPropertySourceLoader,后加載YamlPropertySourceLoader,所以先讀取的是properties文件。

結(jié)束語(yǔ)

了解SpringBoot配置加載相關(guān)知識(shí),可以有效解決配置項(xiàng)不生效問(wèn)題以及需要快速修改配置項(xiàng)的情況。

需要注意的是,在加載多個(gè)配置文件時(shí),如果有沖突的配置項(xiàng),后加載的配置文件中的配置項(xiàng)將覆蓋先加載的配置文件中的相同配置項(xiàng)。因此,在應(yīng)用程序中,應(yīng)該避免使用相同的配置項(xiàng)名來(lái)定義不同的配置值。

責(zé)任編輯:武曉燕 來(lái)源: Java技術(shù)指北
相關(guān)推薦

2023-06-02 16:24:46

SpringBootSSM

2024-12-16 08:10:00

Spring開發(fā)

2017-03-06 15:43:33

Springboot啟動(dòng)

2021-08-12 10:32:50

Spring Boot參數(shù)校驗(yàn)分組校驗(yàn)

2021-08-10 15:11:27

Spring Boot參數(shù)校驗(yàn)

2024-01-10 08:20:13

參數(shù)轉(zhuǎn)換技巧

2023-03-20 13:41:00

IoC容器Spring

2020-07-03 08:00:11

Spring BootSpring Clou流程

2021-03-09 13:18:53

加密解密參數(shù)

2023-12-14 13:28:00

Spring流程Web

2022-06-04 12:25:10

解密加密過(guò)濾器

2024-02-26 00:00:00

GolangRedisDocker

2023-11-06 07:25:51

Spring配置應(yīng)用程序

2020-12-15 10:46:29

事件監(jiān)聽器Spring Boot

2024-05-31 14:06:55

SpringCDSGraalVM

2024-11-01 10:40:32

2024-08-30 11:11:01

2024-05-30 08:51:28

Spring數(shù)據(jù)分布式

2024-10-09 15:54:38

布隆過(guò)濾器函數(shù)

2025-03-27 08:10:19

Spring開發(fā)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)